use actix_web::body::BoxBody; use actix_web::HttpResponse; use std::error::Error; use std::fmt::{Display, Formatter}; use std::io::ErrorKind; pub mod auth_controller; pub mod iso_controller; pub mod server_controller; /// Custom error to ease controller writing #[derive(Debug)] pub struct HttpErr { err: anyhow::Error, } impl Display for HttpErr { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { Display::fmt(&self.err, f) } } impl actix_web::error::ResponseError for HttpErr { fn error_response(&self) -> HttpResponse { log::error!("Error while processing request! {}", self); HttpResponse::InternalServerError().body("Failed to execute request!") } } impl From for HttpErr { fn from(err: anyhow::Error) -> HttpErr { HttpErr { err } } } impl From for HttpErr { fn from(value: serde_json::Error) -> Self { HttpErr { err: value.into() } } } impl From> for HttpErr { fn from(value: Box) -> Self { HttpErr { err: std::io::Error::new(ErrorKind::Other, value.to_string()).into(), } } } impl From for HttpErr { fn from(value: std::io::Error) -> Self { HttpErr { err: value.into() } } } impl From for HttpErr { fn from(value: std::num::ParseIntError) -> Self { HttpErr { err: value.into() } } } impl From for HttpErr { fn from(value: tempfile::PersistError) -> Self { HttpErr { err: value.into() } } } pub type HttpResult = Result;