pub trait IntoResponse {
    // Required method
    fn into_response(self) -> Response<Body>;
}
Expand description

Trait for generating responses.

Types that implement IntoResponse can be returned from handlers.

§Implementing IntoResponse

You generally shouldn’t have to implement IntoResponse manually, as axum provides implementations for many common types.

However it might be necessary if you have a custom error type that you want to return from handlers:

use axum::{
    Router,
    body::{self, Bytes},
    routing::get,
    http::StatusCode,
    response::{IntoResponse, Response},
};

enum MyError {
    SomethingWentWrong,
    SomethingElseWentWrong,
}

impl IntoResponse for MyError {
    fn into_response(self) -> Response {
        let body = match self {
            MyError::SomethingWentWrong => "something went wrong",
            MyError::SomethingElseWentWrong => "something else went wrong",
        };

        // its often easiest to implement `IntoResponse` by calling other implementations
        (StatusCode::INTERNAL_SERVER_ERROR, body).into_response()
    }
}

// `Result<impl IntoResponse, MyError>` can now be returned from handlers
let app = Router::new().route("/", get(handler));

async fn handler() -> Result<(), MyError> {
    Err(MyError::SomethingWentWrong)
}

Or if you have a custom body type you’ll also need to implement IntoResponse for it:

use axum::{
    body,
    routing::get,
    response::{IntoResponse, Response},
    body::Body,
    Router,
};
use http::HeaderMap;
use bytes::Bytes;
use http_body::Frame;
use std::{
    convert::Infallible,
    task::{Poll, Context},
    pin::Pin,
};

struct MyBody;

// First implement `Body` for `MyBody`. This could for example use
// some custom streaming protocol.
impl http_body::Body for MyBody {
    type Data = Bytes;
    type Error = Infallible;

    fn poll_frame(
        self: Pin<&mut Self>,
        cx: &mut Context<'_>,
    ) -> Poll<Option<Result<Frame<Self::Data>, Self::Error>>> {
        // ...
    }
}

// Now we can implement `IntoResponse` directly for `MyBody`
impl IntoResponse for MyBody {
    fn into_response(self) -> Response {
        Response::new(Body::new(self))
    }
}

// `MyBody` can now be returned from handlers.
let app = Router::new().route("/", get(|| async { MyBody }));

Required Methods§

fn into_response(self) -> Response<Body>

Create a response.

Implementations on Foreign Types§

§

impl IntoResponse for &'static str

§

impl IntoResponse for &'static [u8]

§

impl IntoResponse for Cow<'static, str>

§

impl IntoResponse for Cow<'static, [u8]>

§

impl IntoResponse for Infallible

§

impl IntoResponse for ()

§

impl IntoResponse for Box<str>

§

impl IntoResponse for Box<[u8]>

§

impl IntoResponse for String

§

impl IntoResponse for Vec<u8>

§

impl IntoResponse for BytesMut

§

impl<K, V, const N: usize> IntoResponse for [(K, V); N]

§

impl<R> IntoResponse for (Parts, R)
where R: IntoResponse,

§

impl<R> IntoResponse for (Response<()>, R)
where R: IntoResponse,

§

impl<R> IntoResponse for (StatusCode, R)
where R: IntoResponse,

§

impl<R> IntoResponse for (R,)
where R: IntoResponse,

§

impl<R, T1> IntoResponse for (Parts, T1, R)

§

impl<R, T1> IntoResponse for (Response<()>, T1, R)

§

impl<R, T1> IntoResponse for (StatusCode, T1, R)

§

impl<R, T1> IntoResponse for (T1, R)

§

impl<R, T1, T2> IntoResponse for (Parts, T1, T2, R)

§

impl<R, T1, T2> IntoResponse for (Response<()>, T1, T2, R)

§

impl<R, T1, T2> IntoResponse for (StatusCode, T1, T2, R)

§

impl<R, T1, T2> IntoResponse for (T1, T2, R)

§

impl<R, T1, T2, T3> IntoResponse for (Parts, T1, T2, T3, R)

§

impl<R, T1, T2, T3> IntoResponse for (Response<()>, T1, T2, T3, R)

§

impl<R, T1, T2, T3> IntoResponse for (StatusCode, T1, T2, T3, R)

§

impl<R, T1, T2, T3> IntoResponse for (T1, T2, T3, R)

§

impl<R, T1, T2, T3, T4> IntoResponse for (Parts, T1, T2, T3, T4, R)

§

impl<R, T1, T2, T3, T4> IntoResponse for (Response<()>, T1, T2, T3, T4, R)

§

impl<R, T1, T2, T3, T4> IntoResponse for (StatusCode, T1, T2, T3, T4, R)

§

impl<R, T1, T2, T3, T4> IntoResponse for (T1, T2, T3, T4, R)

§

impl<R, T1, T2, T3, T4, T5> IntoResponse for (Parts, T1, T2, T3, T4, T5, R)

§

impl<R, T1, T2, T3, T4, T5> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, R)

§

impl<R, T1, T2, T3, T4, T5> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, R)

§

impl<R, T1, T2, T3, T4, T5> IntoResponse for (T1, T2, T3, T4, T5, R)

§

impl<R, T1, T2, T3, T4, T5, T6> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, R)

§

impl<R, T1, T2, T3, T4, T5, T6> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, R)

§

impl<R, T1, T2, T3, T4, T5, T6> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, R)

§

impl<R, T1, T2, T3, T4, T5, T6> IntoResponse for (T1, T2, T3, T4, T5, T6, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, T7, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, T7, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, T7, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7> IntoResponse for (T1, T2, T3, T4, T5, T6, T7, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, T7, T8, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, T7, T8, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, T7, T8, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8> IntoResponse for (T1, T2, T3, T4, T5, T6, T7, T8, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, T7, T8, T9, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, T7, T8, T9, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, T7, T8, T9, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9> IntoResponse for (T1, T2, T3, T4, T5, T6, T7, T8, T9, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> IntoResponse for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> IntoResponse for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> IntoResponse for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> IntoResponse for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> IntoResponse for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> IntoResponse for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> IntoResponse for (Parts, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> IntoResponse for (Response<()>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> IntoResponse for (StatusCode, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R)

§

impl<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> IntoResponse for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R)

§

impl<T> IntoResponse for Result<T, ErrorResponse>
where T: IntoResponse,

§

impl<T, E> IntoResponse for Result<T, E>

§

impl<T, U> IntoResponse for Chain<T, U>
where T: Buf + Unpin + Send + 'static, U: Buf + Unpin + Send + 'static,

§

impl<const N: usize> IntoResponse for &'static [u8; N]

§

impl<const N: usize> IntoResponse for [u8; N]

Implementors§

§

impl IntoResponse for BytesRejection

§

impl IntoResponse for ExtensionRejection

§

impl IntoResponse for FailedToBufferBody

§

impl IntoResponse for FormRejection

§

impl IntoResponse for HostRejection

§

impl IntoResponse for JsonRejection

§

impl IntoResponse for MatchedPathRejection

§

impl IntoResponse for PathRejection

§

impl IntoResponse for QueryRejection

§

impl IntoResponse for RawFormRejection

§

impl IntoResponse for RawPathParamsRejection

§

impl IntoResponse for StringRejection

§

impl IntoResponse for Binary

§

impl IntoResponse for Css

§

impl IntoResponse for catalyzer::res::Html

§

impl IntoResponse for Js

§

impl IntoResponse for catalyzer::res::Json

§

impl IntoResponse for Text

§

impl IntoResponse for Xml

§

impl IntoResponse for CatalyzerError

§

impl IntoResponse for Body

§

impl IntoResponse for Bytes

§

impl IntoResponse for FailedToDeserializeForm

§

impl IntoResponse for FailedToDeserializeFormBody

§

impl IntoResponse for FailedToDeserializePathParams

§

impl IntoResponse for FailedToDeserializeQueryString

§

impl IntoResponse for FailedToResolveHost

§

impl IntoResponse for InvalidFormContentType

§

impl IntoResponse for InvalidUtf8

§

impl IntoResponse for InvalidUtf8InPathParam

§

impl IntoResponse for JsonDataError

§

impl IntoResponse for JsonSyntaxError

§

impl IntoResponse for LengthLimitError

§

impl IntoResponse for MatchedPathMissing

§

impl IntoResponse for MissingExtension

§

impl IntoResponse for MissingJsonContentType

§

impl IntoResponse for MissingPathParams

§

impl IntoResponse for NestedPathRejection

§

impl IntoResponse for UnknownBodyError

§

impl IntoResponse for Parts

§

impl IntoResponse for Extensions

§

impl IntoResponse for HeaderMap

§

impl IntoResponse for StatusCode

§

impl IntoResponse for Redirect

§

impl<B> IntoResponse for Response<B>
where B: Body<Data = Bytes> + Send + 'static, <B as Body>::Error: Into<Box<dyn Error + Send + Sync>>,

§

impl<I, K, V> IntoResponse for AppendHeaders<I>

§

impl<K, V> IntoResponse for TryIntoHeaderError<K, V>
where K: Display, V: Display,

§

impl<S, E> IntoResponse for Sse<S>
where S: Stream<Item = Result<Event, E>> + Send + 'static, E: Into<Box<dyn Error + Send + Sync>>,

§

impl<T> IntoResponse for Extension<T>
where T: Clone + Send + Sync + 'static,

§

impl<T> IntoResponse for Form<T>
where T: Serialize,

§

impl<T> IntoResponse for catalyzer::internals::crates::axum::Json<T>
where T: Serialize,

§

impl<T> IntoResponse for catalyzer::internals::crates::axum::response::Html<T>
where T: Into<Body>,