mirror of
https://codeberg.org/ashley/poke.git
synced 2024-11-30 01:08:43 +01:00
65 lines
2.2 KiB
Rust
65 lines
2.2 KiB
Rust
use actix_web::http::StatusCode;
|
|
use actix_web::{HttpResponse, ResponseError};
|
|
use serde::Serialize;
|
|
use serde_json;
|
|
use std::fmt::Display;
|
|
use validator::ValidationErrors;
|
|
|
|
#[derive(Clone, Serialize, Debug)]
|
|
#[serde(tag = "type")]
|
|
pub enum Error {
|
|
CouldNotDetermineImageSize,
|
|
CouldNotDetermineVideoSize,
|
|
FailedToParseContentType,
|
|
FailedToConsumeBytes,
|
|
FailedToConsumeText,
|
|
MetaSelectionFailed,
|
|
MissingContentType,
|
|
NotAllowedToProxy,
|
|
ConversionFailed,
|
|
ExceedsMaxBytes,
|
|
ReqwestFailed,
|
|
RequestFailed,
|
|
ProbeError,
|
|
LabelMe,
|
|
FailedValidation {
|
|
#[serde(skip_serializing, skip_deserializing)]
|
|
error: ValidationErrors,
|
|
},
|
|
}
|
|
|
|
impl Display for Error {
|
|
fn fmt(&self, _f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl ResponseError for Error {
|
|
fn status_code(&self) -> StatusCode {
|
|
match *self {
|
|
Error::CouldNotDetermineImageSize => StatusCode::INTERNAL_SERVER_ERROR,
|
|
Error::CouldNotDetermineVideoSize => StatusCode::INTERNAL_SERVER_ERROR,
|
|
Error::FailedToParseContentType => StatusCode::INTERNAL_SERVER_ERROR,
|
|
Error::FailedToConsumeBytes => StatusCode::INTERNAL_SERVER_ERROR,
|
|
Error::FailedToConsumeText => StatusCode::INTERNAL_SERVER_ERROR,
|
|
Error::MetaSelectionFailed => StatusCode::INTERNAL_SERVER_ERROR,
|
|
Error::MissingContentType => StatusCode::BAD_REQUEST,
|
|
Error::NotAllowedToProxy => StatusCode::BAD_REQUEST,
|
|
Error::ConversionFailed => StatusCode::INTERNAL_SERVER_ERROR,
|
|
Error::ExceedsMaxBytes => StatusCode::BAD_REQUEST,
|
|
Error::ReqwestFailed => StatusCode::INTERNAL_SERVER_ERROR,
|
|
Error::RequestFailed => StatusCode::BAD_REQUEST,
|
|
Error::ProbeError => StatusCode::INTERNAL_SERVER_ERROR,
|
|
Error::LabelMe => StatusCode::INTERNAL_SERVER_ERROR,
|
|
Error::FailedValidation { .. } => StatusCode::BAD_REQUEST,
|
|
}
|
|
}
|
|
|
|
fn error_response(&self) -> HttpResponse {
|
|
let body = serde_json::to_string(&self).unwrap();
|
|
|
|
HttpResponse::build(self.status_code())
|
|
.content_type("application/json")
|
|
.body(body)
|
|
}
|
|
}
|