use axum::{response::IntoResponse, Json}; #[derive(Debug, thiserror::Error)] pub enum DashboardsError { #[error("Not found: {0}")] NotFound(String), #[error("Unauthorized: {0}")] Unauthorized(String), #[error("Validation error: {0}")] Validation(String), #[error("Database error: {0}")] Database(String), #[error("Connection error: {0}")] Connection(String), #[error("Query error: {0}")] Query(String), #[error("Internal error: {0}")] Internal(String), } impl IntoResponse for DashboardsError { fn into_response(self) -> axum::response::Response { use axum::http::StatusCode; let (status, message) = match &self { Self::NotFound(msg) => (StatusCode::NOT_FOUND, msg.clone()), Self::Unauthorized(msg) => (StatusCode::UNAUTHORIZED, msg.clone()), Self::Validation(msg) => (StatusCode::BAD_REQUEST, msg.clone()), Self::Database(msg) | Self::Connection(msg) | Self::Query(msg) | Self::Internal(msg) => (StatusCode::INTERNAL_SERVER_ERROR, msg.clone()), }; (status, Json(serde_json::json!({ "error": message }))).into_response() } }