Struct DefaultBodyLimit
pub struct DefaultBodyLimit { /* private fields */ }Expand description
Layer for configuring the default request body limit.
For security reasons, Bytes will, by default, not accept bodies larger than 2MB. This also
applies to extractors that uses Bytes internally such as String, Json, and Form.
This middleware provides ways to configure that.
Note that if an extractor consumes the body directly with Body::poll_frame, or similar, the
default limit is not applied.
§Difference between DefaultBodyLimit and RequestBodyLimit
DefaultBodyLimit and RequestBodyLimit serve similar functions but in different ways.
DefaultBodyLimit is local in that it only applies to FromRequest implementations that
explicitly apply it (or call another extractor that does). You can apply the limit with
RequestExt::with_limited_body or RequestExt::into_limited_body
RequestBodyLimit is applied globally to all requests, regardless of which extractors are
used or how the body is consumed.
§Example
use axum::{
Router,
routing::post,
body::Body,
extract::{Request, DefaultBodyLimit},
};
let app = Router::new()
.route("/", post(|request: Request| async {}))
// change the default limit
.layer(DefaultBodyLimit::max(1024));In general using DefaultBodyLimit is recommended but if you need to use third party
extractors and want to make sure a limit is also applied there then RequestBodyLimit should
be used.
§Different limits for different routes
DefaultBodyLimit can also be selectively applied to have different limits for different
routes:
use axum::{
Router,
routing::post,
body::Body,
extract::{Request, DefaultBodyLimit},
};
let app = Router::new()
// this route has a different limit
.route("/", post(|request: Request| async {}).layer(DefaultBodyLimit::max(1024)))
// this route still has the default limit
.route("/foo", post(|request: Request| async {}));Implementations§
§impl DefaultBodyLimit
impl DefaultBodyLimit
pub const fn disable() -> DefaultBodyLimit
pub const fn disable() -> DefaultBodyLimit
Disable the default request body limit.
This must be used to receive bodies larger than the default limit of 2MB using Bytes or
an extractor built on it such as String, Json, Form.
Note that if you’re accepting data from untrusted remotes it is recommend to add your own
limit such as [tower_http::limit].
§Example
use axum::{
Router,
routing::get,
body::{Bytes, Body},
extract::DefaultBodyLimit,
};
use tower_http::limit::RequestBodyLimitLayer;
let app: Router<()> = Router::new()
.route("/", get(|body: Bytes| async {}))
// Disable the default limit
.layer(DefaultBodyLimit::disable())
// Set a different limit
.layer(RequestBodyLimitLayer::new(10 * 1000 * 1000));pub const fn max(limit: usize) -> DefaultBodyLimit
pub const fn max(limit: usize) -> DefaultBodyLimit
Set the default request body limit.
By default the limit of request body sizes that Bytes::from_request (and other
extractors built on top of it such as String, Json, and Form) is 2MB. This method
can be used to change that limit.
§Example
use axum::{
Router,
routing::get,
body::{Bytes, Body},
extract::DefaultBodyLimit,
};
let app: Router<()> = Router::new()
.route("/", get(|body: Bytes| async {}))
// Replace the default of 2MB with 1024 bytes.
.layer(DefaultBodyLimit::max(1024));pub fn apply<B>(self, req: &mut Request<B>)
pub fn apply<B>(self, req: &mut Request<B>)
Apply a request body limit to the given request.
This can be used, for example, to modify the default body limit inside a specific extractor.
§Example
An extractor similar to Bytes, but limiting the body to 1 KB.
use axum::{
extract::{DefaultBodyLimit, FromRequest, rejection::BytesRejection, Request},
body::Bytes,
};
struct Bytes1KB(Bytes);
impl<S: Sync> FromRequest<S> for Bytes1KB {
type Rejection = BytesRejection;
async fn from_request(mut req: Request, _: &S) -> Result<Self, Self::Rejection> {
DefaultBodyLimit::max(1024).apply(&mut req);
Ok(Self(Bytes::from_request(req, &()).await?))
}
}Trait Implementations§
§impl Clone for DefaultBodyLimit
impl Clone for DefaultBodyLimit
§fn clone(&self) -> DefaultBodyLimit
fn clone(&self) -> DefaultBodyLimit
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for DefaultBodyLimit
impl Debug for DefaultBodyLimit
§impl<S> Layer<S> for DefaultBodyLimit
impl<S> Layer<S> for DefaultBodyLimit
§fn layer(&self, inner: S) -> <DefaultBodyLimit as Layer<S>>::Service
fn layer(&self, inner: S) -> <DefaultBodyLimit as Layer<S>>::Service
impl Copy for DefaultBodyLimit
Auto Trait Implementations§
impl Freeze for DefaultBodyLimit
impl RefUnwindSafe for DefaultBodyLimit
impl Send for DefaultBodyLimit
impl Sync for DefaultBodyLimit
impl Unpin for DefaultBodyLimit
impl UnsafeUnpin for DefaultBodyLimit
impl UnwindSafe for DefaultBodyLimit
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<'src, T> IntoMaybe<'src, T> for Twhere
T: 'src,
impl<'src, T> IntoMaybe<'src, T> for Twhere
T: 'src,
§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute] value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi [Quirk] value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition] value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<'p, T> Seq<'p, T> for Twhere
T: Clone,
impl<'p, T> Seq<'p, T> for Twhere
T: Clone,
§type Iter<'a> = Once<&'a T>
where
T: 'a
type Iter<'a> = Once<&'a T> where T: 'a
§fn contains(&self, val: &T) -> boolwhere
T: PartialEq,
fn contains(&self, val: &T) -> boolwhere
T: PartialEq,
§fn to_maybe_ref<'b>(item: <T as Seq<'p, T>>::Item<'b>) -> Maybe<T, &'p T>where
'p: 'b,
fn to_maybe_ref<'b>(item: <T as Seq<'p, T>>::Item<'b>) -> Maybe<T, &'p T>where
'p: 'b,
MaybeRef].