//! Convert `MizanError` into axum's `Response`. Mirrors mizan-fastapi's //! envelope: `{"error": {"code": "...", "message": "...", "details": ...}}` //! with a Cache-Control: no-store header. use axum::http::{header, HeaderValue, StatusCode}; use axum::response::{IntoResponse, Response}; use axum::Json; use mizan_core::MizanError; pub struct ApiError(pub MizanError); impl From for ApiError { fn from(e: MizanError) -> Self { Self(e) } } impl IntoResponse for ApiError { fn into_response(self) -> Response { let status = StatusCode::from_u16(self.0.http_status()) .unwrap_or(StatusCode::INTERNAL_SERVER_ERROR); let mut resp = (status, Json(self.0.to_json())).into_response(); resp.headers_mut() .insert(header::CACHE_CONTROL, HeaderValue::from_static("no-store")); resp } }