@@ -450,26 +450,30 @@ impl FromRequest<'_, '_> for SocketAddr {
450
450
}
451
451
}
452
452
453
- impl < ' a , ' r , T : FromRequest < ' a , ' r > > FromRequest < ' a , ' r > for Result < T , T :: Error > {
453
+ impl < ' a , ' r , T : FromRequestAsync < ' a , ' r > + ' a > FromRequestAsync < ' a , ' r > for Result < T , T :: Error > {
454
454
type Error = std:: convert:: Infallible ;
455
455
456
- fn from_request ( request : & ' a Request < ' r > ) -> Outcome < Self , Self :: Error > {
457
- match T :: from_request ( request) {
456
+ fn from_request < ' fut > ( request : & ' a Request < ' r > ) -> BoxFuture < ' fut , Outcome < Self , Self :: Error > > where ' a : ' fut {
457
+ // TODO: FutureExt::map is a workaround (see rust-lang/rust#60658)
458
+ use futures_util:: future:: FutureExt ;
459
+ T :: from_request ( request) . map ( |x| match x {
458
460
Success ( val) => Success ( Ok ( val) ) ,
459
461
Failure ( ( _, e) ) => Success ( Err ( e) ) ,
460
462
Forward ( _) => Forward ( ( ) ) ,
461
- }
463
+ } ) . boxed ( )
462
464
}
463
465
}
464
466
465
- impl < ' a , ' r , T : FromRequest < ' a , ' r > > FromRequest < ' a , ' r > for Option < T > {
467
+ impl < ' a , ' r , T : FromRequestAsync < ' a , ' r > + ' a > FromRequestAsync < ' a , ' r > for Option < T > {
466
468
type Error = std:: convert:: Infallible ;
467
469
468
- fn from_request ( request : & ' a Request < ' r > ) -> Outcome < Self , Self :: Error > {
469
- match T :: from_request ( request) {
470
+ fn from_request < ' fut > ( request : & ' a Request < ' r > ) -> BoxFuture < ' fut , Outcome < Self , Self :: Error > > where ' a : ' fut {
471
+ // TODO: FutureExt::map is a workaround (see rust-lang/rust#60658)
472
+ use futures_util:: future:: FutureExt ;
473
+ T :: from_request ( request) . map ( |x| match x {
470
474
Success ( val) => Success ( Some ( val) ) ,
471
475
Failure ( _) | Forward ( _) => Success ( None ) ,
472
- }
476
+ } ) . boxed ( )
473
477
}
474
478
}
475
479
0 commit comments