46 lines
1.2 KiB
Rust
46 lines
1.2 KiB
Rust
use actix_web::http::StatusCode;
|
|
use actix_web::HttpResponse;
|
|
use serde::ser::SerializeStruct;
|
|
use serde::{Serialize, Serializer};
|
|
|
|
#[derive(Debug)]
|
|
pub enum HandlerError {
|
|
BadUid,
|
|
ProtectedSchedule,
|
|
}
|
|
|
|
impl HandlerError {
|
|
fn get_code(&self) -> StatusCode {
|
|
match self {
|
|
HandlerError::BadUid => StatusCode::BAD_REQUEST,
|
|
HandlerError::ProtectedSchedule => StatusCode::FORBIDDEN,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Serialize for HandlerError {
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
let mut s = serializer.serialize_struct("error", 2)?;
|
|
s.serialize_field("code", &self.get_code().as_u16())?;
|
|
s.serialize_field("description", &String::from(self))?;
|
|
s.end()
|
|
}
|
|
}
|
|
|
|
impl From<&HandlerError> for String {
|
|
fn from(err: &HandlerError) -> Self {
|
|
match err {
|
|
HandlerError::BadUid => String::from("the uid is in a bad format"),
|
|
HandlerError::ProtectedSchedule => String::from("the targeted schedule is protected"),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<HandlerError> for HttpResponse {
|
|
fn from(err: HandlerError) -> Self {
|
|
HttpResponse::build(err.get_code()).json(err)
|
|
}
|
|
}
|