mirror of
https://git.proxmox.com/git/rustc
synced 2026-03-28 05:59:24 +00:00
59 lines
1.4 KiB
Rust
59 lines
1.4 KiB
Rust
/// Extracts the successful type of a `Poll<T>`.
|
|
///
|
|
/// This macro bakes in propagation of `Pending` signals by returning early.
|
|
///
|
|
/// # Examples
|
|
///
|
|
/// ```
|
|
/// #![feature(ready_macro)]
|
|
///
|
|
/// use core::task::{ready, Context, Poll};
|
|
/// use core::future::{self, Future};
|
|
/// use core::pin::Pin;
|
|
///
|
|
/// pub fn do_poll(cx: &mut Context<'_>) -> Poll<()> {
|
|
/// let mut fut = future::ready(42);
|
|
/// let fut = Pin::new(&mut fut);
|
|
///
|
|
/// let num = ready!(fut.poll(cx));
|
|
/// # drop(num);
|
|
/// // ... use num
|
|
///
|
|
/// Poll::Ready(())
|
|
/// }
|
|
/// ```
|
|
///
|
|
/// The `ready!` call expands to:
|
|
///
|
|
/// ```
|
|
/// # #![feature(ready_macro)]
|
|
/// #
|
|
/// # use core::task::{Context, Poll};
|
|
/// # use core::future::{self, Future};
|
|
/// # use core::pin::Pin;
|
|
/// #
|
|
/// # pub fn do_poll(cx: &mut Context<'_>) -> Poll<()> {
|
|
/// # let mut fut = future::ready(42);
|
|
/// # let fut = Pin::new(&mut fut);
|
|
/// #
|
|
/// let num = match fut.poll(cx) {
|
|
/// Poll::Ready(t) => t,
|
|
/// Poll::Pending => return Poll::Pending,
|
|
/// };
|
|
/// # drop(num);
|
|
/// # // ... use num
|
|
/// #
|
|
/// # Poll::Ready(())
|
|
/// # }
|
|
/// ```
|
|
#[unstable(feature = "ready_macro", issue = "70922")]
|
|
#[rustc_macro_transparency = "semitransparent"]
|
|
pub macro ready($e:expr) {
|
|
match $e {
|
|
$crate::task::Poll::Ready(t) => t,
|
|
$crate::task::Poll::Pending => {
|
|
return $crate::task::Poll::Pending;
|
|
}
|
|
}
|
|
}
|