Macro ready

macro ready($e:expr) {
    ...
}

Extracts the successful type of a Poll<T>.

This macro bakes in propagation of Pending signals by returning early.

Examples

use std::task::{ready, Context, Poll};
use std::future::{self, Future};
use std::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));
    # let _ = num;
    // ... use num

    Poll::Ready(())
}

The ready! call expands to:

# use std::task::{Context, Poll};
# use std::future::{self, Future};
# use std::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,
};
    # let _ = num; // to silence unused warning
    # // ... use num
    #
    # Poll::Ready(())
# }