#![expect(
clippy::pattern_type_mismatch,
reason = "derive_more doesn't respect these lints"
)]
use actix_web::{error, http::StatusCode, HttpResponse};
use derive_more::{Display, Error};
use std::io;
#[derive(Debug, Display, Error)]
pub enum HTTPError {
#[display(fmt = "404 Not Found")]
NotFound,
#[display(fmt = "Unexpected server error")]
InternalServerError,
}
#[derive(Debug, Display, Error)]
pub enum CliError {
#[display(fmt = "Failed to connect to the database")]
DatabaseConnectionError,
#[display(fmt = "A CLI error occurred")]
GenericError,
#[display(fmt = "Failed to parse the archive ")]
ArchiveParseError,
}
impl From<io::Error> for CliError {
fn from(_error: io::Error) -> Self {
Self::GenericError
}
}
#[derive(Debug, Display, Error)]
pub enum StelaeError {
#[display(fmt = "A Git server occurred")]
GitError,
}
#[expect(clippy::missing_trait_methods, reason = "Use implicit implementation")]
impl error::ResponseError for StelaeError {
fn error_response(&self) -> HttpResponse {
HttpResponse::build(self.status_code()).body(self.to_string())
}
fn status_code(&self) -> StatusCode {
match *self {
Self::GitError => StatusCode::INTERNAL_SERVER_ERROR,
}
}
}