File tree 8 files changed +24
-21
lines changed
8 files changed +24
-21
lines changed Original file line number Diff line number Diff line change @@ -101,9 +101,12 @@ where
101
101
{
102
102
type Rejection = <Self as FromRequestParts < S > >:: Rejection ;
103
103
104
- async fn from_request ( req : Request , state : & S ) -> Result < Self , Self :: Rejection > {
104
+ fn from_request (
105
+ req : Request ,
106
+ state : & S ,
107
+ ) -> impl Future < Output = Result < Self , Self :: Rejection > > {
105
108
let ( mut parts, _) = req. into_parts ( ) ;
106
- Self :: from_request_parts ( & mut parts, state) . await
109
+ async move { Self :: from_request_parts ( & mut parts, state) . await }
107
110
}
108
111
}
109
112
Original file line number Diff line number Diff line change 1
1
use super :: { FromRequest , FromRequestParts , Request } ;
2
2
use crate :: response:: { IntoResponse , Response } ;
3
3
use http:: request:: Parts ;
4
- use std:: convert:: Infallible ;
4
+ use std:: { convert:: Infallible , future :: Future } ;
5
5
6
6
impl < S > FromRequestParts < S > for ( )
7
7
where
@@ -52,18 +52,20 @@ macro_rules! impl_from_request {
52
52
{
53
53
type Rejection = Response ;
54
54
55
- async fn from_request( req: Request , state: & S ) -> Result <Self , Self :: Rejection > {
55
+ fn from_request( req: Request , state: & S ) -> impl Future < Output = Result <Self , Self :: Rejection > > {
56
56
let ( mut parts, body) = req. into_parts( ) ;
57
57
58
- $(
59
- let $ty = $ty:: from_request_parts( & mut parts, state) . await . map_err( |err| err. into_response( ) ) ?;
60
- ) *
58
+ async move {
59
+ $(
60
+ let $ty = $ty:: from_request_parts( & mut parts, state) . await . map_err( |err| err. into_response( ) ) ?;
61
+ ) *
61
62
62
- let req = Request :: from_parts( parts, body) ;
63
+ let req = Request :: from_parts( parts, body) ;
63
64
64
- let $last = $last:: from_request( req, state) . await . map_err( |err| err. into_response( ) ) ?;
65
+ let $last = $last:: from_request( req, state) . await . map_err( |err| err. into_response( ) ) ?;
65
66
66
- Ok ( ( $( $ty, ) * $last, ) )
67
+ Ok ( ( $( $ty, ) * $last, ) )
68
+ }
67
69
}
68
70
}
69
71
} ;
Original file line number Diff line number Diff line change 66
66
type Future = BoxFuture < ' static , Response > ;
67
67
68
68
fn call ( self , req : Request , state : S ) -> Self :: Future {
69
- Box :: pin ( async move {
70
- let ( mut parts, body) = req. into_parts ( ) ;
69
+ let ( mut parts, body) = req. into_parts ( ) ;
71
70
71
+ Box :: pin ( async move {
72
72
if let Ok ( lt) = Lt :: from_request_parts ( & mut parts, & state) . await {
73
73
return self . lhs . call ( lt, state) . await ;
74
74
}
Original file line number Diff line number Diff line change @@ -180,9 +180,9 @@ macro_rules! impl_service {
180
180
let clone = self . inner. clone( ) ;
181
181
let inner = std:: mem:: replace( & mut self . inner, clone) ;
182
182
183
- let future = Box :: pin( async move {
184
- let ( mut parts, body) = req. into_parts( ) ;
183
+ let ( mut parts, body) = req. into_parts( ) ;
185
184
185
+ let future = Box :: pin( async move {
186
186
$(
187
187
let $ty = match $ty:: from_request_parts( & mut parts, & ( ) ) . await {
188
188
Ok ( value) => value,
Original file line number Diff line number Diff line change @@ -214,8 +214,9 @@ where
214
214
215
215
fn call ( & mut self , req : Request < B > ) -> Self :: Future {
216
216
let state = self . state . clone ( ) ;
217
+ let ( mut parts, body) = req. into_parts ( ) ;
218
+
217
219
let extract_future = Box :: pin ( async move {
218
- let ( mut parts, body) = req. into_parts ( ) ;
219
220
let extracted = E :: from_request_parts ( & mut parts, & state) . await ;
220
221
let req = Request :: from_parts ( parts, body) ;
221
222
( req, extracted)
Original file line number Diff line number Diff line change @@ -283,10 +283,9 @@ macro_rules! impl_service {
283
283
284
284
let mut f = self . f. clone( ) ;
285
285
let state = self . state. clone( ) ;
286
+ let ( mut parts, body) = req. into_parts( ) ;
286
287
287
288
let future = Box :: pin( async move {
288
- let ( mut parts, body) = req. into_parts( ) ;
289
-
290
289
$(
291
290
let $ty = match $ty:: from_request_parts( & mut parts, & state) . await {
292
291
Ok ( value) => value,
Original file line number Diff line number Diff line change @@ -282,10 +282,9 @@ macro_rules! impl_service {
282
282
283
283
let mut f = self . f. clone( ) ;
284
284
let state = self . state. clone( ) ;
285
+ let ( mut parts, body) = req. into_parts( ) ;
285
286
286
287
let future = Box :: pin( async move {
287
- let ( mut parts, body) = req. into_parts( ) ;
288
-
289
288
$(
290
289
let $ty = match $ty:: from_request_parts( & mut parts, & state) . await {
291
290
Ok ( value) => value,
Original file line number Diff line number Diff line change @@ -261,10 +261,9 @@ macro_rules! impl_service {
261
261
262
262
let mut f = self . f. clone( ) ;
263
263
let _state = self . state. clone( ) ;
264
+ let ( mut parts, body) = req. into_parts( ) ;
264
265
265
266
let future = Box :: pin( async move {
266
- let ( mut parts, body) = req. into_parts( ) ;
267
-
268
267
$(
269
268
let $ty = match $ty:: from_request_parts( & mut parts, & _state) . await {
270
269
Ok ( value) => value,
You can’t perform that action at this time.
0 commit comments