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}