axum_error_object/
error.rs

1use axum::Json;
2use axum::http::StatusCode;
3use axum::response::IntoResponse;
4use serde::{Deserialize, Serialize};
5
6use crate::ErrorResponse;
7
8#[derive(Debug, Serialize, Deserialize)]
9pub struct ErrorObject<E = ()> {
10    #[serde(skip)]
11    pub status: StatusCode,
12
13    #[serde(default, skip_serializing_if = "Option::is_none")]
14    pub title: Option<String>,
15
16    #[serde(flatten)]
17    pub error: E,
18}
19
20impl<E> From<ErrorObject<E>> for ErrorResponse
21where
22    E: Serialize,
23{
24    fn from(value: ErrorObject<E>) -> Self {
25        let response = (value.status, Json(value)).into_response();
26
27        ErrorResponse::from_response(response)
28    }
29}