@@ -45,51 +45,17 @@ pub trait FutureExt: Future {
4545    } 
4646} 
4747
48- #[ async_trait]  
49- pub  trait  TryFuture :  Future  { 
50-     type  Ok ; 
51-     type  Error ; 
52- 
53-     async  fn  and_then < U ,  F ,  FutB > ( self ,  f :  F )  -> Result < U ,  Self :: Error > 
54-         where  F :  FnOnce ( Self :: Ok )  -> FutB  + Send , 
55-               FutB :  Future < Output  = Result < U ,  Self :: Error > >  + Send , 
56-               Self :  Sized ; 
57- 
58-     async  fn  or_else < U ,  F ,  FutB > ( self ,  f :  F )  -> Result < Self :: Ok ,  U > 
59-         where  F :  FnOnce ( Self :: Error )  -> FutB  + Send , 
60-               FutB :  Future < Output  = Result < Self :: Ok ,  U > >  + Send , 
61-               Self :  Sized ; 
62- 
63-     async  fn  map_ok < U ,  F > ( self ,  f :  F )  -> Result < U ,  Self :: Error > 
64-         where  F :  FnOnce ( Self :: Ok )  -> U  + Send , 
65-               Self :  Sized ; 
66- 
67-     async  fn  map_err < U ,  F > ( self ,  f :  F )  -> Result < Self :: Ok ,  U > 
68-         where  F :  FnOnce ( Self :: Error )  -> U  + Send , 
69-               Self :  Sized ; 
70- 
71-     async  fn  err_into < U > ( self )  -> Result < Self :: Ok ,  U > 
72-         where  Self :: Error :  Into < U > , 
73-               Self :  Sized ; 
74- 
75-     async  fn  unwrap_or_else < F > ( self ,  f :  F )  -> Self :: Ok 
76-         where  F :  FnOnce ( Self :: Error )  -> Self :: Ok  + Send , 
77-               Self :  Sized ; 
78- } 
48+ impl < T ,  E ,  Fut :  ?Sized >  TryFutureExt < T ,  E >  for  Fut  where  Fut :  Future < Output  = Result < T ,  E > >  { } 
7949
8050#[ async_trait]  
81- impl < T ,  E ,  Fut >  TryFuture  for  Fut 
82-     where  Fut :  ?Sized  + Future < Output  = Result < T ,  E > >  + Send , 
83-           T :  Send  + ' static , 
84-           E :  Send  + ' static , 
85- { 
86-     type  Ok  = T ; 
87-     type  Error  = E ; 
51+ pub  trait  TryFutureExt < T ,  E > :  Future < Output  = Result < T ,  E > >  { 
8852
89-     async  fn  and_then < U ,  F ,  FutB > ( self ,  f :  F )  -> Result < U ,  Self :: Error > 
90-         where  F :  FnOnce ( Self :: Ok )  -> FutB  + Send , 
91-               FutB :  Future < Output  = Result < U ,  Self :: Error > >  + Send , 
92-               Self :  Sized 
53+     async  fn  and_then < U ,  F ,  FutB > ( self ,  f :  F )  -> Result < U ,  E > 
54+         where  F :  FnOnce ( T )  -> FutB  + Send , 
55+               FutB :  Future < Output  = Result < U ,  E > >  + Send , 
56+               Self :  Sized , 
57+               T :  Send  + ' async_trait , 
58+               E :  Send  + ' async_trait , 
9359    { 
9460        match  self . await  { 
9561            Ok ( ok)  => { 
@@ -100,10 +66,12 @@ impl<T, E, Fut> TryFuture for Fut
10066        } 
10167    } 
10268
103-     async  fn  or_else < U ,  F ,  FutB > ( self ,  f :  F )  -> Result < Self :: Ok ,  U > 
104-         where  F :  FnOnce ( Self :: Error )  -> FutB  + Send , 
105-               FutB :  Future < Output  = Result < Self :: Ok ,  U > >  + Send , 
69+     async  fn  or_else < U ,  F ,  FutB > ( self ,  f :  F )  -> Result < T ,  U > 
70+         where  F :  FnOnce ( E )  -> FutB  + Send , 
71+               FutB :  Future < Output  = Result < T ,  U > >  + Send , 
10672              Self :  Sized , 
73+               T :  Send  + ' async_trait , 
74+               E :  Send  + ' async_trait , 
10775    { 
10876        match  self . await  { 
10977            Ok ( ok)  => Ok ( ok) , 
@@ -114,30 +82,38 @@ impl<T, E, Fut> TryFuture for Fut
11482        } 
11583    } 
11684
117-     async  fn  map_ok < U ,  F > ( self ,  f :  F )  -> Result < U ,  Self :: Error > 
118-         where  F :  FnOnce ( Self :: Ok )  -> U  + Send , 
119-               Self :  Sized 
85+     async  fn  map_ok < U ,  F > ( self ,  f :  F )  -> Result < U ,  E > 
86+         where  F :  FnOnce ( T )  -> U  + Send , 
87+               Self :  Sized , 
88+               T :  Send  + ' async_trait , 
89+               E :  Send  + ' async_trait , 
12090    { 
12191        self . await . map ( f) 
12292    } 
12393
124-     async  fn  map_err < U ,  F > ( self ,  f :  F )  -> Result < Self :: Ok ,  U > 
125-         where  F :  FnOnce ( Self :: Error )  -> U  + Send , 
94+     async  fn  map_err < U ,  F > ( self ,  f :  F )  -> Result < T ,  U > 
95+         where  F :  FnOnce ( E )  -> U  + Send , 
12696              Self :  Sized , 
97+               T :  Send  + ' async_trait , 
98+               E :  Send  + ' async_trait , 
12799    { 
128100        self . await . map_err ( f) 
129101    } 
130102
131-     async  fn  err_into < U > ( self )  -> Result < Self :: Ok ,  U > 
132-         where  Self :: Error :  Into < U > , 
103+     async  fn  err_into < U > ( self )  -> Result < T ,  U > 
104+         where  E :  Into < U > , 
133105              Self :  Sized , 
106+               T :  Send  + ' async_trait , 
107+               E :  Send  + ' async_trait , 
134108    { 
135109        self . await . map_err ( Into :: into) 
136110    } 
137111
138-     async  fn  unwrap_or_else < F > ( self ,  f :  F )  -> Self :: Ok 
139-         where  F :  FnOnce ( Self :: Error )  -> Self :: Ok  + Send , 
112+     async  fn  unwrap_or_else < F > ( self ,  f :  F )  -> T 
113+         where  F :  FnOnce ( E )  -> T  + Send , 
140114              Self :  Sized , 
115+               T :  Send  + ' async_trait , 
116+               E :  Send  + ' async_trait , 
141117    { 
142118        self . await . unwrap_or_else ( f) 
143119    } 
0 commit comments