@@ -450,26 +450,30 @@ impl FromRequest<'_, '_> for SocketAddr {
450450 }
451451}
452452
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 > {
454454 type Error = std:: convert:: Infallible ;
455455
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 {
458460 Success ( val) => Success ( Ok ( val) ) ,
459461 Failure ( ( _, e) ) => Success ( Err ( e) ) ,
460462 Forward ( _) => Forward ( ( ) ) ,
461- }
463+ } ) . boxed ( )
462464 }
463465}
464466
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 > {
466468 type Error = std:: convert:: Infallible ;
467469
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 {
470474 Success ( val) => Success ( Some ( val) ) ,
471475 Failure ( _) | Forward ( _) => Success ( None ) ,
472- }
476+ } ) . boxed ( )
473477 }
474478}
475479
0 commit comments