use std::{
error,
fmt::{
Debug,
Display,
Formatter,
Result as fmtResult,
},
};
use serde::{
Deserialize,
Serialize,
};
use super::user_error::UserError;
#[derive(Debug, PartialEq, Serialize, Deserialize)]
pub enum Error {
UserError(UserError),
TechnicalError(String),
}
impl error::Error for Error {}
impl Display for Error {
fn fmt(
&self,
f: &mut Formatter<'_>,
) -> fmtResult {
match self {
Error::TechnicalError(message) => {
write!(f, "{}", message)
},
Error::UserError(message) => {
write!(f, "{}", message)
},
}
}
}
impl Error {
pub fn new(msg: &str) -> Self {
Error::UserError(UserError {
code: None,
message: Some(msg.to_string()),
params: None,
})
}
}
impl From<serde_json::error::Error> for Error {
fn from(e: serde_json::error::Error) -> Self {
match e.classify() {
serde_json::error::Category::Syntax => {
Error::new("invalid json")
},
serde_json::error::Category::Io |
serde_json::error::Category::Data |
serde_json::error::Category::Eof => Error::new("fail"),
}
}
}