pub struct Form<T>(pub T);Expand description
URL encoded extractor and response.
§As extractor
If used as an extractor, Form will deserialize form data from the request,
specifically:
- If the request has a method of GETorHEAD, the form data will be read from the query string (same as withQuery)
- If the request has a different method, the form will be read from the body
of the request. It must have a content-typeofapplication/x-www-form-urlencodedfor this to work. If you want to parsemultipart/form-datarequest bodies, useMultipartinstead.
This matches how HTML forms are sent by browsers by default.
In both cases, the inner type T must implement [serde::Deserialize].
⚠️ Since parsing form data might require consuming the request body, the Form extractor must be
last if there are multiple extractors in a handler. See “the order of
extractors”
use axum::Form;
use serde::Deserialize;
#[derive(Deserialize)]
struct SignUp {
    username: String,
    password: String,
}
async fn accept_form(Form(sign_up): Form<SignUp>) {
    // ...
}§As response
Form can also be used to encode any type that implements
[serde::Serialize] as application/x-www-form-urlencoded
use axum::Form;
use serde::Serialize;
#[derive(Serialize)]
struct Payload {
    value: String,
}
async fn handler() -> Form<Payload> {
    Form(Payload { value: "foo".to_owned() })
}Tuple Fields§
§0: TTrait Implementations§
Source§impl<T, S> FromRequest<S> for Form<T>
 
impl<T, S> FromRequest<S> for Form<T>
Source§type Rejection = FormRejection
 
type Rejection = FormRejection
If the extractor fails it’ll use this “rejection” type. A rejection is
a kind of error that can be converted into a response.
Source§impl<T> IntoResponse for Form<T>where
    T: Serialize,
 
impl<T> IntoResponse for Form<T>where
    T: Serialize,
Source§fn into_response(self) -> Response<Body>
 
fn into_response(self) -> Response<Body>
Create a response.
impl<T> Copy for Form<T>where
    T: Copy,
Auto Trait Implementations§
impl<T> Freeze for Form<T>where
    T: Freeze,
impl<T> RefUnwindSafe for Form<T>where
    T: RefUnwindSafe,
impl<T> Send for Form<T>where
    T: Send,
impl<T> Sync for Form<T>where
    T: Sync,
impl<T> Unpin for Form<T>where
    T: Unpin,
impl<T> UnwindSafe for Form<T>where
    T: UnwindSafe,
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
Source§impl<T, S> Handler<IntoResponseHandler, S> for T
 
impl<T, S> Handler<IntoResponseHandler, S> for T
Source§fn call(
    self,
    _req: Request<Body>,
    _state: S,
) -> <T as Handler<IntoResponseHandler, S>>::Future
 
fn call( self, _req: Request<Body>, _state: S, ) -> <T as Handler<IntoResponseHandler, S>>::Future
Call the handler with the given request.
Source§fn layer<L>(self, layer: L) -> Layered<L, Self, T, S>where
    L: Layer<HandlerService<Self, T, S>> + Clone,
    <L as Layer<HandlerService<Self, T, S>>>::Service: Service<Request<Body>>,
 
fn layer<L>(self, layer: L) -> Layered<L, Self, T, S>where
    L: Layer<HandlerService<Self, T, S>> + Clone,
    <L as Layer<HandlerService<Self, T, S>>>::Service: Service<Request<Body>>,
Apply a 
tower::Layer to the handler. Read moreSource§fn with_state(self, state: S) -> HandlerService<Self, T, S>
 
fn with_state(self, state: S) -> HandlerService<Self, T, S>
Convert the handler into a 
Service by providing the stateSource§impl<H, T> HandlerWithoutStateExt<T> for H
 
impl<H, T> HandlerWithoutStateExt<T> for H
Source§fn into_service(self) -> HandlerService<H, T, ()>
 
fn into_service(self) -> HandlerService<H, T, ()>
Convert the handler into a 
Service and no state.Source§fn into_make_service(self) -> IntoMakeService<HandlerService<H, T, ()>>
 
fn into_make_service(self) -> IntoMakeService<HandlerService<H, T, ()>>
Convert the handler into a 
MakeService and no state. Read moreSource§fn into_make_service_with_connect_info<C>(
    self,
) -> IntoMakeServiceWithConnectInfo<HandlerService<H, T, ()>, C>
 
fn into_make_service_with_connect_info<C>( self, ) -> IntoMakeServiceWithConnectInfo<HandlerService<H, T, ()>, C>
Convert the handler into a 
MakeService which stores information
about the incoming connection and has no state. Read moreSource§impl<T> Instrument for T
 
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
 
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> PolicyExt for Twhere
    T: ?Sized,
 
impl<T> PolicyExt for Twhere
    T: ?Sized,
Source§impl<T> ServiceExt for T
 
impl<T> ServiceExt for T
Source§fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>where
    Self: Sized,
 
fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>where
    Self: Sized,
Propagate a header from the request to the response. Read more
Source§fn add_extension<T>(self, value: T) -> AddExtension<Self, T>where
    Self: Sized,
 
fn add_extension<T>(self, value: T) -> AddExtension<Self, T>where
    Self: Sized,
Add some shareable value to request extensions. Read more
Source§fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>where
    Self: Sized,
 
fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>where
    Self: Sized,
Apply a transformation to the request body. Read more
Source§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
    Self: Sized,
 
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
    Self: Sized,
Apply a transformation to the response body. Read more
Source§fn compression(self) -> Compression<Self>where
    Self: Sized,
 
fn compression(self) -> Compression<Self>where
    Self: Sized,
Compresses response bodies. Read more
Source§fn decompression(self) -> Decompression<Self>where
    Self: Sized,
 
fn decompression(self) -> Decompression<Self>where
    Self: Sized,
Decompress response bodies. Read more
Source§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
    Self: Sized,
 
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
    Self: Sized,
High level tracing that classifies responses using HTTP status codes. Read more
Source§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
    Self: Sized,
 
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
    Self: Sized,
High level tracing that classifies responses using gRPC headers. Read more
Source§fn follow_redirects(self) -> FollowRedirect<Self>where
    Self: Sized,
 
fn follow_redirects(self) -> FollowRedirect<Self>where
    Self: Sized,
Source§fn sensitive_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>where
    Self: Sized,
 
fn sensitive_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>where
    Self: Sized,
Source§fn sensitive_request_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<Self>where
    Self: Sized,
 
fn sensitive_request_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<Self>where
    Self: Sized,
Source§fn sensitive_response_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveResponseHeaders<Self>where
    Self: Sized,
 
fn sensitive_response_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveResponseHeaders<Self>where
    Self: Sized,
Source§fn override_request_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
 
fn override_request_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
Insert a header into the request. Read more
Source§fn append_request_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
 
fn append_request_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
Append a header into the request. Read more
Source§fn insert_request_header_if_not_present<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
 
fn insert_request_header_if_not_present<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
Insert a header into the request, if the header is not already present. Read more
Source§fn override_response_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
 
fn override_response_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
Insert a header into the response. Read more
Source§fn append_response_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
 
fn append_response_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
Append a header into the response. Read more
Source§fn insert_response_header_if_not_present<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
 
fn insert_response_header_if_not_present<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
Insert a header into the response, if the header is not already present. Read more
Source§fn set_request_id<M>(
    self,
    header_name: HeaderName,
    make_request_id: M,
) -> SetRequestId<Self, M>where
    Self: Sized,
    M: MakeRequestId,
 
fn set_request_id<M>(
    self,
    header_name: HeaderName,
    make_request_id: M,
) -> SetRequestId<Self, M>where
    Self: Sized,
    M: MakeRequestId,
Add request id header and extension. Read more
Source§fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
    Self: Sized,
    M: MakeRequestId,
 
fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
    Self: Sized,
    M: MakeRequestId,
Add request id header and extension, using 
x-request-id as the header name. Read moreSource§fn propagate_request_id(
    self,
    header_name: HeaderName,
) -> PropagateRequestId<Self>where
    Self: Sized,
 
fn propagate_request_id(
    self,
    header_name: HeaderName,
) -> PropagateRequestId<Self>where
    Self: Sized,
Propgate request ids from requests to responses. Read more
Source§fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
    Self: Sized,
 
fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
    Self: Sized,
Propgate request ids from requests to responses, using 
x-request-id as the header name. Read moreSource§fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>where
    Self: Sized,
 
fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>where
    Self: Sized,
Catch panics and convert them into 
500 Internal Server responses. Read moreSource§fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
    Self: Sized,
 
fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
    Self: Sized,
Intercept requests with over-sized payloads and convert them into
413 Payload Too Large responses. Read moreSource§fn trim_trailing_slash(self) -> NormalizePath<Self>where
    Self: Sized,
 
fn trim_trailing_slash(self) -> NormalizePath<Self>where
    Self: Sized,
Remove trailing slashes from paths. Read more
Source§fn append_trailing_slash(self) -> NormalizePath<Self>where
    Self: Sized,
 
fn append_trailing_slash(self) -> NormalizePath<Self>where
    Self: Sized,
Append trailing slash to paths. Read more