axum_core/extract/
rejection.rs1use crate::__composite_rejection as composite_rejection;
4use crate::__define_rejection as define_rejection;
5
6use crate::{BoxError, Error};
7
8composite_rejection! {
9    pub enum FailedToBufferBody {
12        LengthLimitError,
13        UnknownBodyError,
14    }
15}
16
17impl FailedToBufferBody {
18    pub(crate) fn from_err<E>(err: E) -> Self
19    where
20        E: Into<BoxError>,
21    {
22        let box_error = match err.into().downcast::<Error>() {
26            Ok(err) => err.into_inner(),
27            Err(err) => err,
28        };
29        let box_error = match box_error.downcast::<Error>() {
30            Ok(err) => err.into_inner(),
31            Err(err) => err,
32        };
33        match box_error.downcast::<http_body_util::LengthLimitError>() {
34            Ok(err) => Self::LengthLimitError(LengthLimitError::from_err(err)),
35            Err(err) => Self::UnknownBodyError(UnknownBodyError::from_err(err)),
36        }
37    }
38}
39
40define_rejection! {
41    #[status = PAYLOAD_TOO_LARGE]
42    #[body = "Failed to buffer the request body"]
43    pub struct LengthLimitError(Error);
48}
49
50define_rejection! {
51    #[status = BAD_REQUEST]
52    #[body = "Failed to buffer the request body"]
53    pub struct UnknownBodyError(Error);
55}
56
57define_rejection! {
58    #[status = BAD_REQUEST]
59    #[body = "Request body didn't contain valid UTF-8"]
60    pub struct InvalidUtf8(Error);
63}
64
65composite_rejection! {
66    pub enum BytesRejection {
71        FailedToBufferBody,
72    }
73}
74
75composite_rejection! {
76    pub enum StringRejection {
80        FailedToBufferBody,
81        InvalidUtf8,
82    }
83}