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(Option); #[unstable(feature = "future_readiness_fns", issue = "70921")] impl Unpin for Ready {} #[unstable(feature = "future_readiness_fns", issue = "70921")] impl Future for Ready { type Output = T; #[inline] fn poll(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll { 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) -> Ready { Ready(Some(t)) }