hightower_client/
error.rs

1use std::error::Error;
2use std::fmt;
3
4#[derive(Debug)]
5pub enum ClientError {
6    Configuration(String),
7    Request(reqwest::Error),
8    GatewayError { status: u16, message: String },
9    InvalidResponse(String),
10    NetworkDiscovery(String),
11    Transport(String),
12    Storage(String),
13}
14
15impl fmt::Display for ClientError {
16    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17        match self {
18            ClientError::Configuration(msg) => write!(f, "configuration error: {}", msg),
19            ClientError::Request(err) => write!(f, "request error: {}", err),
20            ClientError::GatewayError { status, message } => {
21                write!(f, "gateway error (status {}): {}", status, message)
22            }
23            ClientError::InvalidResponse(msg) => write!(f, "invalid response: {}", msg),
24            ClientError::NetworkDiscovery(msg) => write!(f, "network discovery failed: {}", msg),
25            ClientError::Transport(msg) => write!(f, "transport error: {}", msg),
26            ClientError::Storage(msg) => write!(f, "storage error: {}", msg),
27        }
28    }
29}
30
31impl Error for ClientError {
32    fn source(&self) -> Option<&(dyn Error + 'static)> {
33        match self {
34            ClientError::Request(err) => Some(err),
35            _ => None,
36        }
37    }
38}
39
40impl From<reqwest::Error> for ClientError {
41    fn from(err: reqwest::Error) -> Self {
42        ClientError::Request(err)
43    }
44}