Run into_parts eagerly in more places

This commit is contained in:
Jonas Platte
2025-03-28 09:35:21 +01:00
committed by Jonas Platte
parent ee4727b865
commit 2f2bb99550
8 changed files with 24 additions and 21 deletions
+5 -2
View File
@@ -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 }
} }
} }
+10 -8
View File
@@ -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,))
}
} }
} }
}; };
+2 -2
View File
@@ -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;
} }
+2 -2
View File
@@ -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,
+2 -1
View File
@@ -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)
+1 -2
View File
@@ -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,
+1 -2
View File
@@ -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,
+1 -2
View File
@@ -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,