Skip to content

Commit 2f2bb99

Browse files
svix-jplattejplatte
authored andcommitted
Run into_parts eagerly in more places
1 parent ee4727b commit 2f2bb99

File tree

8 files changed

+24
-21
lines changed

8 files changed

+24
-21
lines changed

axum-core/src/extract/mod.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,12 @@ where
101101
{
102102
type Rejection = <Self as FromRequestParts<S>>::Rejection;
103103

104-
async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> {
104+
fn from_request(
105+
req: Request,
106+
state: &S,
107+
) -> impl Future<Output = Result<Self, Self::Rejection>> {
105108
let (mut parts, _) = req.into_parts();
106-
Self::from_request_parts(&mut parts, state).await
109+
async move { Self::from_request_parts(&mut parts, state).await }
107110
}
108111
}
109112

axum-core/src/extract/tuple.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::{FromRequest, FromRequestParts, Request};
22
use crate::response::{IntoResponse, Response};
33
use http::request::Parts;
4-
use std::convert::Infallible;
4+
use std::{convert::Infallible, future::Future};
55

66
impl<S> FromRequestParts<S> for ()
77
where
@@ -52,18 +52,20 @@ macro_rules! impl_from_request {
5252
{
5353
type Rejection = Response;
5454

55-
async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> {
55+
fn from_request(req: Request, state: &S) -> impl Future<Output = Result<Self, Self::Rejection>> {
5656
let (mut parts, body) = req.into_parts();
5757

58-
$(
59-
let $ty = $ty::from_request_parts(&mut parts, state).await.map_err(|err| err.into_response())?;
60-
)*
58+
async move {
59+
$(
60+
let $ty = $ty::from_request_parts(&mut parts, state).await.map_err(|err| err.into_response())?;
61+
)*
6162

62-
let req = Request::from_parts(parts, body);
63+
let req = Request::from_parts(parts, body);
6364

64-
let $last = $last::from_request(req, state).await.map_err(|err| err.into_response())?;
65+
let $last = $last::from_request(req, state).await.map_err(|err| err.into_response())?;
6566

66-
Ok(($($ty,)* $last,))
67+
Ok(($($ty,)* $last,))
68+
}
6769
}
6870
}
6971
};

axum-extra/src/handler/or.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ where
6666
type Future = BoxFuture<'static, Response>;
6767

6868
fn call(self, req: Request, state: S) -> Self::Future {
69-
Box::pin(async move {
70-
let (mut parts, body) = req.into_parts();
69+
let (mut parts, body) = req.into_parts();
7170

71+
Box::pin(async move {
7272
if let Ok(lt) = Lt::from_request_parts(&mut parts, &state).await {
7373
return self.lhs.call(lt, state).await;
7474
}

axum/src/error_handling/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,9 @@ macro_rules! impl_service {
180180
let clone = self.inner.clone();
181181
let inner = std::mem::replace(&mut self.inner, clone);
182182

183-
let future = Box::pin(async move {
184-
let (mut parts, body) = req.into_parts();
183+
let (mut parts, body) = req.into_parts();
185184

185+
let future = Box::pin(async move {
186186
$(
187187
let $ty = match $ty::from_request_parts(&mut parts, &()).await {
188188
Ok(value) => value,

axum/src/middleware/from_extractor.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,9 @@ where
214214

215215
fn call(&mut self, req: Request<B>) -> Self::Future {
216216
let state = self.state.clone();
217+
let (mut parts, body) = req.into_parts();
218+
217219
let extract_future = Box::pin(async move {
218-
let (mut parts, body) = req.into_parts();
219220
let extracted = E::from_request_parts(&mut parts, &state).await;
220221
let req = Request::from_parts(parts, body);
221222
(req, extracted)

axum/src/middleware/from_fn.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -283,10 +283,9 @@ macro_rules! impl_service {
283283

284284
let mut f = self.f.clone();
285285
let state = self.state.clone();
286+
let (mut parts, body) = req.into_parts();
286287

287288
let future = Box::pin(async move {
288-
let (mut parts, body) = req.into_parts();
289-
290289
$(
291290
let $ty = match $ty::from_request_parts(&mut parts, &state).await {
292291
Ok(value) => value,

axum/src/middleware/map_request.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -282,10 +282,9 @@ macro_rules! impl_service {
282282

283283
let mut f = self.f.clone();
284284
let state = self.state.clone();
285+
let (mut parts, body) = req.into_parts();
285286

286287
let future = Box::pin(async move {
287-
let (mut parts, body) = req.into_parts();
288-
289288
$(
290289
let $ty = match $ty::from_request_parts(&mut parts, &state).await {
291290
Ok(value) => value,

axum/src/middleware/map_response.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -261,10 +261,9 @@ macro_rules! impl_service {
261261

262262
let mut f = self.f.clone();
263263
let _state = self.state.clone();
264+
let (mut parts, body) = req.into_parts();
264265

265266
let future = Box::pin(async move {
266-
let (mut parts, body) = req.into_parts();
267-
268267
$(
269268
let $ty = match $ty::from_request_parts(&mut parts, &_state).await {
270269
Ok(value) => value,

0 commit comments

Comments
 (0)