mirror of
https://github.com/tokio-rs/axum.git
synced 2025-03-17 12:50:03 +01:00
* Move `IntoResponse` to axum-core * Move `FromRequest` to axum-core * some clean up * Remove hyper dependency from axum-core * Fix docs reference * Use default * Update changelog * Remove mention of default type
159 lines
4.6 KiB
Rust
159 lines
4.6 KiB
Rust
macro_rules! define_rejection {
|
|
(
|
|
#[status = $status:ident]
|
|
#[body = $body:expr]
|
|
$(#[$m:meta])*
|
|
pub struct $name:ident;
|
|
) => {
|
|
$(#[$m])*
|
|
#[derive(Debug)]
|
|
#[non_exhaustive]
|
|
pub struct $name;
|
|
|
|
#[allow(deprecated)]
|
|
impl $crate::response::IntoResponse for $name {
|
|
fn into_response(self) -> http::Response<$crate::body::BoxBody> {
|
|
let mut res = http::Response::new($crate::body::boxed(http_body::Full::from($body)));
|
|
*res.status_mut() = http::StatusCode::$status;
|
|
res
|
|
}
|
|
}
|
|
|
|
impl std::fmt::Display for $name {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
write!(f, "{}", $body)
|
|
}
|
|
}
|
|
|
|
impl std::error::Error for $name {}
|
|
|
|
impl Default for $name {
|
|
fn default() -> Self {
|
|
Self
|
|
}
|
|
}
|
|
};
|
|
|
|
(
|
|
#[status = $status:ident]
|
|
#[body = $body:expr]
|
|
$(#[$m:meta])*
|
|
pub struct $name:ident (Error);
|
|
) => {
|
|
$(#[$m])*
|
|
#[derive(Debug)]
|
|
pub struct $name(pub(crate) crate::Error);
|
|
|
|
impl $name {
|
|
pub(crate) fn from_err<E>(err: E) -> Self
|
|
where
|
|
E: Into<crate::BoxError>,
|
|
{
|
|
Self(crate::Error::new(err))
|
|
}
|
|
}
|
|
|
|
impl crate::response::IntoResponse for $name {
|
|
fn into_response(self) -> http::Response<$crate::body::BoxBody> {
|
|
let body = http_body::Full::from(format!(concat!($body, ": {}"), self.0));
|
|
let body = $crate::body::boxed(body);
|
|
let mut res =
|
|
http::Response::new(body);
|
|
*res.status_mut() = http::StatusCode::$status;
|
|
res
|
|
}
|
|
}
|
|
|
|
impl std::fmt::Display for $name {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
write!(f, "{}", $body)
|
|
}
|
|
}
|
|
|
|
impl std::error::Error for $name {
|
|
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
|
|
Some(&self.0)
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
macro_rules! composite_rejection {
|
|
(
|
|
$(#[$m:meta])*
|
|
pub enum $name:ident {
|
|
$($variant:ident),+
|
|
$(,)?
|
|
}
|
|
) => {
|
|
$(#[$m])*
|
|
#[derive(Debug)]
|
|
#[non_exhaustive]
|
|
pub enum $name {
|
|
$(
|
|
#[allow(missing_docs, deprecated)]
|
|
$variant($variant)
|
|
),+
|
|
}
|
|
|
|
impl $crate::response::IntoResponse for $name {
|
|
fn into_response(self) -> http::Response<$crate::body::BoxBody> {
|
|
match self {
|
|
$(
|
|
Self::$variant(inner) => inner.into_response(),
|
|
)+
|
|
}
|
|
}
|
|
}
|
|
|
|
$(
|
|
#[allow(deprecated)]
|
|
impl From<$variant> for $name {
|
|
fn from(inner: $variant) -> Self {
|
|
Self::$variant(inner)
|
|
}
|
|
}
|
|
)+
|
|
|
|
impl std::fmt::Display for $name {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
match self {
|
|
$(
|
|
Self::$variant(inner) => write!(f, "{}", inner),
|
|
)+
|
|
}
|
|
}
|
|
}
|
|
|
|
impl std::error::Error for $name {
|
|
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
|
|
match self {
|
|
$(
|
|
Self::$variant(inner) => Some(inner),
|
|
)+
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
macro_rules! all_the_tuples {
|
|
($name:ident) => {
|
|
$name!(T1);
|
|
$name!(T1, T2);
|
|
$name!(T1, T2, T3);
|
|
$name!(T1, T2, T3, T4);
|
|
$name!(T1, T2, T3, T4, T5);
|
|
$name!(T1, T2, T3, T4, T5, T6);
|
|
$name!(T1, T2, T3, T4, T5, T6, T7);
|
|
$name!(T1, T2, T3, T4, T5, T6, T7, T8);
|
|
$name!(T1, T2, T3, T4, T5, T6, T7, T8, T9);
|
|
$name!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10);
|
|
$name!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11);
|
|
$name!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12);
|
|
$name!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13);
|
|
$name!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14);
|
|
$name!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15);
|
|
$name!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16);
|
|
};
|
|
}
|