From d9ac6c08a2d8540c3385b58863d79d2dbdc0abbb Mon Sep 17 00:00:00 2001 From: shockrah Date: Mon, 25 May 2020 13:46:57 -0700 Subject: [PATCH] experimental generic error handler --- server/src/err.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/server/src/err.rs b/server/src/err.rs index ff8a256..302dc2b 100644 --- a/server/src/err.rs +++ b/server/src/err.rs @@ -4,6 +4,8 @@ use rocket::http::Status; use rocket::request::Request; +// Generic Error responders + #[derive(Debug, Clone)] pub struct DbResponse { pub err_msg: &'static str @@ -30,3 +32,36 @@ impl<'r> Responder<'r> for DbResponse { .ok() } } + +/* + * Generic error that we can both serialize and return as an API response + */ +#[derive(Debug, Clone)] +pub struct ResponseErr { + pub msg: &'static str, + pub status: i16, + pub err_type: &'static str, +} + +pub type ResponseResult = std::result::Result; + +impl fmt::Display for ResponseErr { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, self.err_type) + } +} + +impl error::Error for ResponseErr { + fn source(&self) -> Option(&(dyn error::Error + 'static)> { + None + } +} + +impl error::Error for ResponseErr { + fn respond_to(self, _:&Request) -> response::Result<'r> { + Response::build() + .status(self.status) + .raw_header(self.err_type, self.msg) + .ok() + } +}