46 lines
1.2 KiB
Rust
46 lines
1.2 KiB
Rust
use crate::future::Future;
|
|
use crate::pin::Pin;
|
|
use crate::task::{Context, Poll};
|
|
|
|
/// Creates a future that is immediately ready with a value.
|
|
///
|
|
/// This `struct` is created by the [`ready`] function. See its
|
|
/// documentation for more.
|
|
///
|
|
/// [`ready`]: fn.ready.html
|
|
#[unstable(feature = "future_readiness_fns", issue = "70921")]
|
|
#[derive(Debug, Clone)]
|
|
#[must_use = "futures do nothing unless you `.await` or poll them"]
|
|
pub struct Ready<T>(Option<T>);
|
|
|
|
#[unstable(feature = "future_readiness_fns", issue = "70921")]
|
|
impl<T> Unpin for Ready<T> {}
|
|
|
|
#[unstable(feature = "future_readiness_fns", issue = "70921")]
|
|
impl<T> Future for Ready<T> {
|
|
type Output = T;
|
|
|
|
#[inline]
|
|
fn poll(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<T> {
|
|
Poll::Ready(self.0.take().expect("Ready polled after completion"))
|
|
}
|
|
}
|
|
|
|
/// Creates a future that is immediately ready with a value.
|
|
///
|
|
/// # Examples
|
|
///
|
|
/// ```
|
|
/// #![feature(future_readiness_fns)]
|
|
/// use core::future;
|
|
///
|
|
/// # async fn run() {
|
|
/// let a = future::ready(1);
|
|
/// assert_eq!(a.await, 1);
|
|
/// # }
|
|
/// ```
|
|
#[unstable(feature = "future_readiness_fns", issue = "70921")]
|
|
pub fn ready<T>(t: T) -> Ready<T> {
|
|
Ready(Some(t))
|
|
}
|