Skip to content

Commit 184d67d

Browse files
jebrosenSergioBenitez
authored andcommitted
Implement FromRequestAsync instead of FromRequest for Option and Result.
1 parent e8f5555 commit 184d67d

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

core/lib/src/request/from_request.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)