File tree 2 files changed +57
-0
lines changed
2 files changed +57
-0
lines changed Original file line number Diff line number Diff line change
1
+ use crate :: 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( any( feature = "unstable" , feature = "docs" ) ) ]
34
+ #[ cfg_attr( feature = "docs" , doc( cfg( unstable) ) ) ]
35
+ pub 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
+
46
+ impl < T : Future > IntoFuture for T {
47
+ type Output = T :: Output ;
48
+
49
+ type Future = T ;
50
+
51
+ fn into_future ( self ) -> Self :: Future {
52
+ self
53
+ }
54
+ }
Original file line number Diff line number Diff line change @@ -63,7 +63,10 @@ mod ready;
63
63
64
64
cfg_if ! {
65
65
if #[ cfg( any( feature = "unstable" , feature = "docs" ) ) ] {
66
+ mod into_future;
66
67
mod timeout;
68
+
69
+ pub use into_future:: IntoFuture ;
67
70
pub use timeout:: { timeout, TimeoutError } ;
68
71
}
69
72
}
You can’t perform that action at this time.
0 commit comments