use http::StatusCode;
use modkit::api::problem::Problem;
use crate::domain::error::DomainError;
pub fn domain_error_to_problem(err: DomainError) -> Problem {
match err {
DomainError::FileNotFound { path } => Problem::new(
StatusCode::NOT_FOUND,
"File Not Found",
format!("File not found: {path}"),
),
DomainError::UnsupportedFileType { extension } => Problem::new(
StatusCode::BAD_REQUEST,
"Unsupported File Type",
format!("Unsupported file type: {extension}"),
),
DomainError::NoParserAvailable { extension } => Problem::new(
StatusCode::UNSUPPORTED_MEDIA_TYPE,
"No Parser Available",
format!("No parser available for extension: {extension}"),
),
DomainError::ParseError { message } => {
Problem::new(StatusCode::UNPROCESSABLE_ENTITY, "Parse Error", message)
}
DomainError::IoError { message } => {
Problem::new(StatusCode::INTERNAL_SERVER_ERROR, "IO Error", message)
}
DomainError::InvalidRequest { message } => {
Problem::new(StatusCode::BAD_REQUEST, "Invalid Request", message)
}
DomainError::PathTraversalBlocked { message } => {
Problem::new(StatusCode::FORBIDDEN, "Path Traversal Blocked", message)
}
}
}
impl From<DomainError> for Problem {
fn from(e: DomainError) -> Self {
domain_error_to_problem(e)
}
}