diff options
| author | Alexis Bourget <alexis.bourget@gmail.com> | 2020-07-19 22:15:44 +0200 |
|---|---|---|
| committer | Alexis Bourget <alexis.bourget@gmail.com> | 2020-07-19 22:15:44 +0200 |
| commit | 471dd52d7710dcad5fec0cd731b836b02ba4a8f4 (patch) | |
| tree | 4f7a1b7fcf01c8fb5c255a5af32b3906b44d38fa /src/libcore/task/ready.rs | |
| parent | e88220f86749d88e53c5dbaa421dcaba1889f86c (diff) | |
| parent | d7f94516345a36ddfcd68cbdf1df835d356795c3 (diff) | |
| download | rust-471dd52d7710dcad5fec0cd731b836b02ba4a8f4.tar.gz rust-471dd52d7710dcad5fec0cd731b836b02ba4a8f4.zip | |
Fix merge conflict with recent PR
Diffstat (limited to 'src/libcore/task/ready.rs')
| -rw-r--r-- | src/libcore/task/ready.rs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/libcore/task/ready.rs b/src/libcore/task/ready.rs new file mode 100644 index 00000000000..d4e733eb2bc --- /dev/null +++ b/src/libcore/task/ready.rs @@ -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; + } + } +} |
