bronzedb_util/
status.rs

1use std::fmt::{Display, Formatter};
2use std::io;
3use std::u8::MAX;
4
5#[derive(Debug, Copy, Clone, PartialOrd, PartialEq)]
6pub enum StatusCode {
7    OK = 0,
8    IOError = 1,
9    UnknownAction = 2,
10    EngineError = 3,
11    NotFound = 4,
12    Complete = 5,
13    UnknownStatusCode = MAX as isize,
14}
15
16impl From<u8> for StatusCode {
17    fn from(code: u8) -> Self {
18        match code {
19            0 => StatusCode::OK,
20            1 => StatusCode::IOError,
21            2 => StatusCode::UnknownAction,
22            3 => StatusCode::EngineError,
23            4 => StatusCode::NotFound,
24            5 => StatusCode::Complete,
25            _ => StatusCode::UnknownStatusCode,
26        }
27    }
28}
29
30impl ToString for StatusCode {
31    fn to_string(&self) -> String {
32        match self {
33            StatusCode::OK => "OK".into(),
34            StatusCode::IOError => "IOError".into(),
35            StatusCode::UnknownAction => "UnknownAction".into(),
36            StatusCode::EngineError => "EngineError".into(),
37            StatusCode::NotFound => "NotFound".into(),
38            StatusCode::Complete => "Complete".into(),
39            StatusCode::UnknownStatusCode => "UnknownStatusCode".into(),
40        }
41    }
42}
43
44pub type Result<T> = core::result::Result<T, Error>;
45
46#[derive(Debug, Clone)]
47pub struct Error {
48    pub code: StatusCode,
49    pub message: String,
50}
51
52impl Error {
53    pub fn new(code: StatusCode, message: impl Into<String>) -> Self {
54        Self {
55            code,
56            message: message.into(),
57        }
58    }
59}
60
61impl Display for Error {
62    fn fmt(&self, f: &mut Formatter) -> core::fmt::Result {
63        write!(f, "{}: {}", self.code.to_string(), self.message)
64    }
65}
66
67impl From<io::Error> for Error {
68    fn from(err: io::Error) -> Self {
69        Self {
70            code: StatusCode::IOError,
71            message: err.to_string(),
72        }
73    }
74}
75
76impl std::error::Error for Error {}