Files
YANPM/apps/api/src/errors/service_error.rs

40 lines
1.2 KiB
Rust

use sea_orm::DbErr;
#[derive(Debug)]
pub enum ServiceError {
NotFound(String),
DatabaseError(String),
Unauthorized(String),
InternalError(String),
BadRequest(String),
}
impl From<Box<dyn std::error::Error + Send + Sync + 'static>> for ServiceError {
fn from(err: Box<dyn std::error::Error + Send + Sync + 'static>) -> Self {
ServiceError::InternalError(err.to_string())
}
}
impl std::fmt::Display for ServiceError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ServiceError::NotFound(msg) => write!(f, "Not Found: {}", msg),
ServiceError::DatabaseError(msg) => write!(f, "Database Error: {}", msg),
ServiceError::Unauthorized(msg) => write!(f, "Unauthorized: {}", msg),
ServiceError::InternalError(msg) => write!(f, "Internal Error: {}", msg),
ServiceError::BadRequest(msg) => write!(f, "Bad Request: {}", msg),
}
}
}
impl std::error::Error for ServiceError {}
impl From<DbErr> for ServiceError {
fn from(err: DbErr) -> Self {
match err {
DbErr::RecordNotFound(msg) => ServiceError::NotFound(msg),
_ => ServiceError::DatabaseError(err.to_string()),
}
}
}