use axum::{Json, http::StatusCode, response::{IntoResponse, Response}}; use serde_json::json; use thiserror::Error; use crate::errors::atproto_error::ResolveError; #[derive(Debug, Error)] pub enum ApiError { #[error(transparent)] Resolve(#[from] ResolveError), #[error("An unknown error occurred")] Unknown, #[error(transparent)] Redis(#[from] redis::RedisError), } impl IntoResponse for ApiError { fn into_response(self) -> Response { match self { Self::Resolve(err) => err.into_response(), Self::Unknown => ( StatusCode::INTERNAL_SERVER_ERROR, Json(json!({ "error": "An unknown error occurred" })), ).into_response(), ApiError::Redis(redis_error) => ( StatusCode::INTERNAL_SERVER_ERROR, Json(json!({ "error": format!("An internal redis error occurred: {redis_error}") })) ).into_response(), } } }