monzo/
error.rs

1use reqwest::StatusCode;
2
3/// Common error type for anything that can go wrong with this crate
4#[derive(Debug, thiserror::Error)]
5pub enum Error {
6    /// HTTP Errors
7    #[error("HTTP error: {0}")]
8    Http(#[from] reqwest::Error),
9
10    /// Serialisation/Deserialisation Errors
11    #[error("unable to serialise/deserialise struct")]
12    Serde(#[from] serde_json::Error),
13
14    /// Error returned when the access token has expired
15    #[error("Access token has expired!")]
16    AuthExpired,
17
18    /// API client errors
19    #[error("Client error: {0}")]
20    Client(StatusCode),
21
22    /// API server errors
23    #[error("Server error: {0}")]
24    Server(StatusCode),
25}
26
27impl From<StatusCode> for Error {
28    fn from(status_code: StatusCode) -> Self {
29        if status_code == StatusCode::UNAUTHORIZED {
30            return Self::AuthExpired;
31        } else if status_code.is_client_error() {
32            return Self::Client(status_code);
33        } else if status_code.is_server_error() {
34            return Self::Server(status_code);
35        }
36        unimplemented!()
37    }
38}