mirror of
https://github.com/tokio-rs/axum.git
synced 2026-09-07 00:00:12 +02:00
Run into_parts eagerly in more places
This commit is contained in:
committed by
Jonas Platte
parent
ee4727b865
commit
2f2bb99550
@@ -101,9 +101,12 @@ where
|
|||||||
{
|
{
|
||||||
type Rejection = <Self as FromRequestParts<S>>::Rejection;
|
type Rejection = <Self as FromRequestParts<S>>::Rejection;
|
||||||
|
|
||||||
async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> {
|
fn from_request(
|
||||||
|
req: Request,
|
||||||
|
state: &S,
|
||||||
|
) -> impl Future<Output = Result<Self, Self::Rejection>> {
|
||||||
let (mut parts, _) = req.into_parts();
|
let (mut parts, _) = req.into_parts();
|
||||||
Self::from_request_parts(&mut parts, state).await
|
async move { Self::from_request_parts(&mut parts, state).await }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use super::{FromRequest, FromRequestParts, Request};
|
use super::{FromRequest, FromRequestParts, Request};
|
||||||
use crate::response::{IntoResponse, Response};
|
use crate::response::{IntoResponse, Response};
|
||||||
use http::request::Parts;
|
use http::request::Parts;
|
||||||
use std::convert::Infallible;
|
use std::{convert::Infallible, future::Future};
|
||||||
|
|
||||||
impl<S> FromRequestParts<S> for ()
|
impl<S> FromRequestParts<S> for ()
|
||||||
where
|
where
|
||||||
@@ -52,18 +52,20 @@ macro_rules! impl_from_request {
|
|||||||
{
|
{
|
||||||
type Rejection = Response;
|
type Rejection = Response;
|
||||||
|
|
||||||
async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> {
|
fn from_request(req: Request, state: &S) -> impl Future<Output = Result<Self, Self::Rejection>> {
|
||||||
let (mut parts, body) = req.into_parts();
|
let (mut parts, body) = req.into_parts();
|
||||||
|
|
||||||
$(
|
async move {
|
||||||
let $ty = $ty::from_request_parts(&mut parts, state).await.map_err(|err| err.into_response())?;
|
$(
|
||||||
)*
|
let $ty = $ty::from_request_parts(&mut parts, state).await.map_err(|err| err.into_response())?;
|
||||||
|
)*
|
||||||
|
|
||||||
let req = Request::from_parts(parts, body);
|
let req = Request::from_parts(parts, body);
|
||||||
|
|
||||||
let $last = $last::from_request(req, state).await.map_err(|err| err.into_response())?;
|
let $last = $last::from_request(req, state).await.map_err(|err| err.into_response())?;
|
||||||
|
|
||||||
Ok(($($ty,)* $last,))
|
Ok(($($ty,)* $last,))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -66,9 +66,9 @@ where
|
|||||||
type Future = BoxFuture<'static, Response>;
|
type Future = BoxFuture<'static, Response>;
|
||||||
|
|
||||||
fn call(self, req: Request, state: S) -> Self::Future {
|
fn call(self, req: Request, state: S) -> Self::Future {
|
||||||
Box::pin(async move {
|
let (mut parts, body) = req.into_parts();
|
||||||
let (mut parts, body) = req.into_parts();
|
|
||||||
|
|
||||||
|
Box::pin(async move {
|
||||||
if let Ok(lt) = Lt::from_request_parts(&mut parts, &state).await {
|
if let Ok(lt) = Lt::from_request_parts(&mut parts, &state).await {
|
||||||
return self.lhs.call(lt, state).await;
|
return self.lhs.call(lt, state).await;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -180,9 +180,9 @@ macro_rules! impl_service {
|
|||||||
let clone = self.inner.clone();
|
let clone = self.inner.clone();
|
||||||
let inner = std::mem::replace(&mut self.inner, clone);
|
let inner = std::mem::replace(&mut self.inner, clone);
|
||||||
|
|
||||||
let future = Box::pin(async move {
|
let (mut parts, body) = req.into_parts();
|
||||||
let (mut parts, body) = req.into_parts();
|
|
||||||
|
|
||||||
|
let future = Box::pin(async move {
|
||||||
$(
|
$(
|
||||||
let $ty = match $ty::from_request_parts(&mut parts, &()).await {
|
let $ty = match $ty::from_request_parts(&mut parts, &()).await {
|
||||||
Ok(value) => value,
|
Ok(value) => value,
|
||||||
|
|||||||
@@ -214,8 +214,9 @@ where
|
|||||||
|
|
||||||
fn call(&mut self, req: Request<B>) -> Self::Future {
|
fn call(&mut self, req: Request<B>) -> Self::Future {
|
||||||
let state = self.state.clone();
|
let state = self.state.clone();
|
||||||
|
let (mut parts, body) = req.into_parts();
|
||||||
|
|
||||||
let extract_future = Box::pin(async move {
|
let extract_future = Box::pin(async move {
|
||||||
let (mut parts, body) = req.into_parts();
|
|
||||||
let extracted = E::from_request_parts(&mut parts, &state).await;
|
let extracted = E::from_request_parts(&mut parts, &state).await;
|
||||||
let req = Request::from_parts(parts, body);
|
let req = Request::from_parts(parts, body);
|
||||||
(req, extracted)
|
(req, extracted)
|
||||||
|
|||||||
@@ -283,10 +283,9 @@ macro_rules! impl_service {
|
|||||||
|
|
||||||
let mut f = self.f.clone();
|
let mut f = self.f.clone();
|
||||||
let state = self.state.clone();
|
let state = self.state.clone();
|
||||||
|
let (mut parts, body) = req.into_parts();
|
||||||
|
|
||||||
let future = Box::pin(async move {
|
let future = Box::pin(async move {
|
||||||
let (mut parts, body) = req.into_parts();
|
|
||||||
|
|
||||||
$(
|
$(
|
||||||
let $ty = match $ty::from_request_parts(&mut parts, &state).await {
|
let $ty = match $ty::from_request_parts(&mut parts, &state).await {
|
||||||
Ok(value) => value,
|
Ok(value) => value,
|
||||||
|
|||||||
@@ -282,10 +282,9 @@ macro_rules! impl_service {
|
|||||||
|
|
||||||
let mut f = self.f.clone();
|
let mut f = self.f.clone();
|
||||||
let state = self.state.clone();
|
let state = self.state.clone();
|
||||||
|
let (mut parts, body) = req.into_parts();
|
||||||
|
|
||||||
let future = Box::pin(async move {
|
let future = Box::pin(async move {
|
||||||
let (mut parts, body) = req.into_parts();
|
|
||||||
|
|
||||||
$(
|
$(
|
||||||
let $ty = match $ty::from_request_parts(&mut parts, &state).await {
|
let $ty = match $ty::from_request_parts(&mut parts, &state).await {
|
||||||
Ok(value) => value,
|
Ok(value) => value,
|
||||||
|
|||||||
@@ -261,10 +261,9 @@ macro_rules! impl_service {
|
|||||||
|
|
||||||
let mut f = self.f.clone();
|
let mut f = self.f.clone();
|
||||||
let _state = self.state.clone();
|
let _state = self.state.clone();
|
||||||
|
let (mut parts, body) = req.into_parts();
|
||||||
|
|
||||||
let future = Box::pin(async move {
|
let future = Box::pin(async move {
|
||||||
let (mut parts, body) = req.into_parts();
|
|
||||||
|
|
||||||
$(
|
$(
|
||||||
let $ty = match $ty::from_request_parts(&mut parts, &_state).await {
|
let $ty = match $ty::from_request_parts(&mut parts, &_state).await {
|
||||||
Ok(value) => value,
|
Ok(value) => value,
|
||||||
|
|||||||
Reference in New Issue
Block a user