mirror of https://github.com/rwf2/Rocket.git
Implement FromRequestAsync instead of FromRequest for Option and Result.
This commit is contained in:
parent
4e5b889358
commit
2fa2d636e4
|
@ -450,26 +450,30 @@ impl FromRequest<'_, '_> for SocketAddr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'r, T: FromRequest<'a, 'r>> FromRequest<'a, 'r> for Result<T, T::Error> {
|
impl<'a, 'r, T: FromRequestAsync<'a, 'r> + 'a> FromRequestAsync<'a, 'r> for Result<T, T::Error> {
|
||||||
type Error = std::convert::Infallible;
|
type Error = std::convert::Infallible;
|
||||||
|
|
||||||
fn from_request(request: &'a Request<'r>) -> Outcome<Self, Self::Error> {
|
fn from_request<'fut>(request: &'a Request<'r>) -> BoxFuture<'fut, Outcome<Self, Self::Error>> where 'a: 'fut {
|
||||||
match T::from_request(request) {
|
// TODO: FutureExt::map is a workaround (see rust-lang/rust#60658)
|
||||||
|
use futures_util::future::FutureExt;
|
||||||
|
T::from_request(request).map(|x| match x {
|
||||||
Success(val) => Success(Ok(val)),
|
Success(val) => Success(Ok(val)),
|
||||||
Failure((_, e)) => Success(Err(e)),
|
Failure((_, e)) => Success(Err(e)),
|
||||||
Forward(_) => Forward(()),
|
Forward(_) => Forward(()),
|
||||||
}
|
}).boxed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'r, T: FromRequest<'a, 'r>> FromRequest<'a, 'r> for Option<T> {
|
impl<'a, 'r, T: FromRequestAsync<'a, 'r> + 'a> FromRequestAsync<'a, 'r> for Option<T> {
|
||||||
type Error = std::convert::Infallible;
|
type Error = std::convert::Infallible;
|
||||||
|
|
||||||
fn from_request(request: &'a Request<'r>) -> Outcome<Self, Self::Error> {
|
fn from_request<'fut>(request: &'a Request<'r>) -> BoxFuture<'fut, Outcome<Self, Self::Error>> where 'a: 'fut {
|
||||||
match T::from_request(request) {
|
// TODO: FutureExt::map is a workaround (see rust-lang/rust#60658)
|
||||||
|
use futures_util::future::FutureExt;
|
||||||
|
T::from_request(request).map(|x| match x {
|
||||||
Success(val) => Success(Some(val)),
|
Success(val) => Success(Some(val)),
|
||||||
Failure(_) | Forward(_) => Success(None),
|
Failure(_) | Forward(_) => Success(None),
|
||||||
}
|
}).boxed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue