From 0b0a8d4db3b4a00fd13a46e628d5cd9adcb9a770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Ant=C3=B4nio=20Cardoso?= Date: Tue, 10 Dec 2024 13:42:57 -0300 Subject: [PATCH] src: lib: server: Specify the server errors API --- src/lib/server/error.rs | 55 +++++++++++++++++++++++++++++++++++++++++ src/lib/server/mod.rs | 1 + 2 files changed, 56 insertions(+) create mode 100644 src/lib/server/error.rs diff --git a/src/lib/server/error.rs b/src/lib/server/error.rs new file mode 100644 index 00000000..b8b08d16 --- /dev/null +++ b/src/lib/server/error.rs @@ -0,0 +1,55 @@ +use actix_web::{http::StatusCode, ResponseError}; + +use paperclip::actix::api_v2_errors; +use validator::ValidationErrors; + +pub type Result = actix_web::Result; + +#[allow(dead_code)] +#[api_v2_errors( + code = 400, + description = "Bad Request: The client's request contains invalid or malformed data.", + code = 404, + description = "Not Found: The requested path or entity does not exist.", + code = 500, + description = "Internal Server Error: An unexpected server error has occurred.", + code = 503, + description = "Service Unavailable: ." +)] +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("Bad Request: {0}")] + BadRequest(String), + + #[error("Not Found: {0}")] + NotFound(String), + + #[error("Internal Server Error: {0}")] + Internal(String), + + #[error("Service Unavailable: {0}")] + Unavailable(String), +} + +impl ResponseError for Error { + fn status_code(&self) -> StatusCode { + match self { + Self::BadRequest(_) => StatusCode::BAD_REQUEST, + Self::NotFound(_) => StatusCode::NOT_FOUND, + Self::Internal(_) => StatusCode::INTERNAL_SERVER_ERROR, + Self::Unavailable(_) => StatusCode::SERVICE_UNAVAILABLE, + } + } +} + +impl From for Error { + fn from(error: ValidationErrors) -> Self { + Self::BadRequest(error.to_string()) + } +} + +impl From for Error { + fn from(error: actix_web_validator::Error) -> Self { + Self::BadRequest(error.to_string()) + } +} diff --git a/src/lib/server/mod.rs b/src/lib/server/mod.rs index 272f4a52..7241b7ad 100644 --- a/src/lib/server/mod.rs +++ b/src/lib/server/mod.rs @@ -1,2 +1,3 @@ +mod error; pub mod manager; mod pages;