mirror of
https://github.com/tokio-rs/axum.git
synced 2026-09-07 00:00:12 +02:00
Add RequestExt::{with_limited_body, into_limited_body} (#1420)
* Move RequestExt and RequestPartsExt into axum-core * Add RequestExt::into_limited_body … and use it for Bytes extraction. * Add RequestExt::with_limited_body … and use it for Multipart extraction. Co-authored-by: David Pedersen <[email protected]>
This commit is contained in:
co-authored by
David Pedersen
parent
be54583d98
commit
b94248191e
@@ -0,0 +1,50 @@
|
||||
pub(crate) mod request;
|
||||
pub(crate) mod request_parts;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::convert::Infallible;
|
||||
|
||||
use crate::extract::{FromRef, FromRequestParts};
|
||||
use async_trait::async_trait;
|
||||
use http::request::Parts;
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy)]
|
||||
pub(crate) struct State<S>(pub(crate) S);
|
||||
|
||||
#[async_trait]
|
||||
impl<OuterState, InnerState> FromRequestParts<OuterState> for State<InnerState>
|
||||
where
|
||||
InnerState: FromRef<OuterState>,
|
||||
OuterState: Send + Sync,
|
||||
{
|
||||
type Rejection = Infallible;
|
||||
|
||||
async fn from_request_parts(
|
||||
_parts: &mut Parts,
|
||||
state: &OuterState,
|
||||
) -> Result<Self, Self::Rejection> {
|
||||
let inner_state = InnerState::from_ref(state);
|
||||
Ok(Self(inner_state))
|
||||
}
|
||||
}
|
||||
|
||||
// some extractor that requires the state, such as `SignedCookieJar`
|
||||
pub(crate) struct RequiresState(pub(crate) String);
|
||||
|
||||
#[async_trait]
|
||||
impl<S> FromRequestParts<S> for RequiresState
|
||||
where
|
||||
S: Send + Sync,
|
||||
String: FromRef<S>,
|
||||
{
|
||||
type Rejection = Infallible;
|
||||
|
||||
async fn from_request_parts(
|
||||
_parts: &mut Parts,
|
||||
state: &S,
|
||||
) -> Result<Self, Self::Rejection> {
|
||||
Ok(Self(String::from_ref(state)))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user