1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
use core::pin::Pin; use futures_core::future::{FusedFuture, Future}; use futures_core::task::{Context, Poll}; /// Future for the [`ready`](ready()) function. #[derive(Debug, Clone)] #[must_use = "futures do nothing unless polled"] pub struct Ready<T>(Option<T>); impl<T> Unpin for Ready<T> {} impl<T> FusedFuture for Ready<T> { fn is_terminated(&self) -> bool { self.0.is_none() } } 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().unwrap()) } } /// Create a future that is immediately ready with a value. /// /// # Examples /// /// ``` /// #![feature(async_await, await_macro, futures_api)] /// # futures::executor::block_on(async { /// use futures::future; /// /// let a = future::ready(1); /// assert_eq!(await!(a), 1); /// # }); /// ``` pub fn ready<T>(t: T) -> Ready<T> { Ready(Some(t)) } /// Create a future that is immediately ready with a success value. /// /// # Examples /// /// ``` /// #![feature(async_await, await_macro, futures_api)] /// # futures::executor::block_on(async { /// use futures::future; /// /// let a = future::ok::<i32, i32>(1); /// assert_eq!(await!(a), Ok(1)); /// # }); /// ``` pub fn ok<T, E>(t: T) -> Ready<Result<T, E>> { Ready(Some(Ok(t))) } /// Create a future that is immediately ready with an error value. /// /// # Examples /// /// ``` /// #![feature(async_await, await_macro, futures_api)] /// # futures::executor::block_on(async { /// use futures::future; /// /// let a = future::err::<i32, i32>(1); /// assert_eq!(await!(a), Err(1)); /// # }); /// ``` pub fn err<T, E>(err: E) -> Ready<Result<T, E>> { Ready(Some(Err(err))) }