async_std/future/
into_future.rs

1use std::future::Future;
2
3/// Convert a type into a `Future`.
4///
5/// # Examples
6///
7/// ```
8/// use async_std::future::{Future, IntoFuture};
9/// use async_std::io;
10/// use async_std::pin::Pin;
11///
12/// struct Client;
13///
14/// impl Client {
15///     pub async fn send(self) -> io::Result<()> {
16///         // Send a request
17///         Ok(())
18///     }
19/// }
20///
21/// impl IntoFuture for Client {
22///     type Output = io::Result<()>;
23///
24///     type Future = Pin<Box<dyn Future<Output = Self::Output>>>;
25///
26///     fn into_future(self) -> Self::Future {
27///         Box::pin(async {
28///             self.send().await
29///         })
30///     }
31/// }
32/// ```
33#[cfg(feature = "unstable")]
34#[cfg_attr(feature = "docs", doc(cfg(unstable)))]
35pub trait IntoFuture {
36    /// The type of value produced on completion.
37    type Output;
38
39    /// Which kind of future are we turning this into?
40    type Future: Future<Output = Self::Output>;
41
42    /// Create a future from a value
43    fn into_future(self) -> Self::Future;
44}
45
46impl<T: Future> IntoFuture for T {
47    type Output = T::Output;
48    type Future = T;
49
50    fn into_future(self) -> Self::Future {
51        self
52    }
53}