Add core::ready! macro
This commit is contained in:
parent
9d09331e00
commit
18be370342
|
@ -9,3 +9,7 @@ pub use self::poll::Poll;
|
|||
mod wake;
|
||||
#[stable(feature = "futures_api", since = "1.36.0")]
|
||||
pub use self::wake::{Context, RawWaker, RawWakerVTable, Waker};
|
||||
|
||||
mod ready;
|
||||
#[unstable(feature = "ready_macro", issue = "70922")]
|
||||
pub use ready::ready;
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
/// Extracts the successful type of a `Poll<T>`.
|
||||
///
|
||||
/// This macro bakes in propagation of `Pending` signals by returning early.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(future_readiness_fns)]
|
||||
/// #![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(future_readiness_fns)]
|
||||
/// # #![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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -299,6 +299,7 @@
|
|||
#![feature(ptr_internals)]
|
||||
#![feature(raw)]
|
||||
#![feature(raw_ref_macros)]
|
||||
#![feature(ready_macro)]
|
||||
#![feature(renamed_spin_loop)]
|
||||
#![feature(rustc_attrs)]
|
||||
#![feature(rustc_private)]
|
||||
|
|
Loading…
Reference in New Issue