use std::error::Error;
use serde::{Serialize, Deserialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct RustError {
pub code: i64,
pub message: String,
pub description: String
}
pub struct RustErrorParams {
pub code: Option<i64>,
pub message: Option<String>,
pub description: Option<String>
}
impl RustError {
pub fn new(code: Option<i64>, message: Option<String>, description: Option<String>) -> RustError {
let code_value: i64;
let message_value: String;
let description_value: String;
if code.is_some() {
code_value = code.unwrap();
} else {
code_value = 0;
}
if message.is_some() {
message_value = message.unwrap();
} else {
message_value = String::new();
}
if description.is_some() {
description_value = description.unwrap();
} else {
description_value = String::new();
}
RustError {
code: code_value,
message: message_value,
description: description_value
}
}
pub fn from_params(params: RustErrorParams) -> RustError {
if params.code.is_some() || params.message.is_some() || params.description.is_some() {
RustError::new(params.code, params.message, params.description)
} else {
panic!("You need to use params")
}
}
pub fn from_string(description: &str) -> RustError {
RustError::new(None, None, Some(String::from(description)))
}
}
impl std::fmt::Display for RustError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
write!(f, "{:?}", self)
}
}
impl Error for RustError {
fn description(&self) -> &str {
&self.description
}
}