use crate::domain::vo::ApiResponse; use axum::{ http::StatusCode, response::{IntoResponse, Response}, Json, }; #[derive(Debug)] pub struct ErrorResponse { pub status: StatusCode, pub message: String, } impl ErrorResponse { pub fn new(message: impl Into) -> Self { Self::bad_request(message) } pub fn bad_request(message: impl Into) -> Self { Self { status: StatusCode::BAD_REQUEST, message: message.into(), } } pub fn unauthorized(message: impl Into) -> Self { Self { status: StatusCode::UNAUTHORIZED, message: message.into(), } } pub fn not_found(message: impl Into) -> Self { Self { status: StatusCode::NOT_FOUND, message: message.into(), } } pub fn too_many_requests(message: impl Into) -> Self { Self { status: StatusCode::TOO_MANY_REQUESTS, message: message.into(), } } pub fn payload_too_large(message: impl Into) -> Self { Self { status: StatusCode::PAYLOAD_TOO_LARGE, message: message.into(), } } pub fn unavailable(message: impl Into) -> Self { Self { status: StatusCode::SERVICE_UNAVAILABLE, message: message.into(), } } pub fn internal(message: impl Into) -> Self { Self { status: StatusCode::INTERNAL_SERVER_ERROR, message: message.into(), } } } impl IntoResponse for ErrorResponse { fn into_response(self) -> Response { ( self.status, Json(ApiResponse::<()> { code: self.status.as_u16(), message: self.message, data: None, }), ) .into_response() } }