mirror of
https://github.com/clowzed/sero
synced 2026-03-23 00:24:41 +01:00
37 lines
1 KiB
Rust
37 lines
1 KiB
Rust
use crate::{services::site::error::ServiceError as SiteServiceError, Details};
|
|
use axum::{
|
|
http::StatusCode,
|
|
response::{IntoResponse, Response},
|
|
Json,
|
|
};
|
|
use sea_orm::DbErr;
|
|
use std::io;
|
|
|
|
#[derive(thiserror::Error, Debug)]
|
|
pub enum DownloadError {
|
|
#[error(transparent)]
|
|
DbError(#[from] DbErr),
|
|
#[error(transparent)]
|
|
SiteServiceError(#[from] SiteServiceError),
|
|
#[error(transparent)]
|
|
IoError(#[from] io::Error),
|
|
}
|
|
|
|
impl From<DownloadError> for StatusCode {
|
|
fn from(value: DownloadError) -> Self {
|
|
match value {
|
|
DownloadError::DbError(_) => StatusCode::INTERNAL_SERVER_ERROR,
|
|
DownloadError::SiteServiceError(error) => Self::from(error),
|
|
DownloadError::IoError(_) => StatusCode::INTERNAL_SERVER_ERROR,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl IntoResponse for DownloadError {
|
|
fn into_response(self) -> Response {
|
|
let reason = self.to_string();
|
|
let status_code: StatusCode = self.into();
|
|
|
|
(status_code, Json(Details { reason })).into_response()
|
|
}
|
|
}
|