Skip to main content

jokoway_core/
error.rs

1use std::fmt;
2
3#[derive(Debug)]
4pub enum JokowayError {
5    Config(String),
6    Upstream(String),
7    Proxy(String),
8    Tls(String),
9    Acme(String),
10    Io(std::io::Error),
11    Network(String),
12    Other(String),
13}
14
15impl std::error::Error for JokowayError {
16    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
17        match self {
18            JokowayError::Io(err) => Some(err),
19            _ => None,
20        }
21    }
22}
23
24impl fmt::Display for JokowayError {
25    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26        match self {
27            JokowayError::Config(msg) => write!(f, "Configuration error: {}", msg),
28            JokowayError::Upstream(msg) => write!(f, "Upstream error: {}", msg),
29            JokowayError::Proxy(msg) => write!(f, "Proxy error: {}", msg),
30            JokowayError::Tls(msg) => write!(f, "TLS error: {}", msg),
31            JokowayError::Acme(msg) => write!(f, "ACME error: {}", msg),
32            JokowayError::Io(err) => write!(f, "I/O error: {}", err),
33            JokowayError::Network(msg) => write!(f, "Network error: {}", msg),
34            JokowayError::Other(msg) => write!(f, "Error: {}", msg),
35        }
36    }
37}
38
39impl From<std::io::Error> for JokowayError {
40    fn from(err: std::io::Error) -> Self {
41        JokowayError::Io(err)
42    }
43}
44
45impl From<Box<dyn std::error::Error>> for JokowayError {
46    fn from(err: Box<dyn std::error::Error>) -> Self {
47        JokowayError::Other(err.to_string())
48    }
49}
50
51impl From<String> for JokowayError {
52    fn from(s: String) -> Self {
53        JokowayError::Other(s)
54    }
55}
56
57impl From<&str> for JokowayError {
58    fn from(s: &str) -> Self {
59        JokowayError::Other(s.to_string())
60    }
61}
62impl From<Box<dyn std::error::Error + Send + Sync>> for JokowayError {
63    fn from(err: Box<dyn std::error::Error + Send + Sync>) -> Self {
64        JokowayError::Other(err.to_string())
65    }
66}