azurlane/
error.rs

1use serde_json::Error as JsonError;
2use std::error::Error as StdError;
3use std::fmt::{Display, Formatter, Result as FmtResult};
4use std::result::Result as StdResult;
5
6use reqwest::{
7    Error as ReqwestError,
8    Response as ReqwestResponse,
9    UrlError as ReqwestUrlError,
10};
11
12/// A result type to compose a successful value and the library's [`Error`]
13/// type.
14///
15/// [`Error`]: enum.Error.html
16pub type Result<T> = StdResult<T, Error>;
17
18/// An error type to compose a singular error enum between various dependencies'
19/// errors.
20#[derive(Debug)]
21pub enum Error {
22    /// An error from the `serde_json` crate.
23    ///
24    /// A potential reason for this is when there is an error deserializing a
25    /// JSON response body.
26    Json(JsonError),
27    /// An error from the `reqwest` crate when it is enabled.
28    Reqwest(ReqwestError),
29    /// An error indicating a bad request when using `reqwest`.
30    ReqwestBad(Box<ReqwestResponse>),
31    /// An error indicating an invalid request when using `reqwest`.
32    ReqwestInvalid(Box<ReqwestResponse>),
33    /// An error indicating a parsing issue when using `reqwest`.
34    ReqwestParse(ReqwestUrlError),
35    /// An error indicating an unathorized request when using `reqwest`.
36    ReqwestUnauthorized(Box<ReqwestResponse>),
37}
38
39impl From<JsonError> for Error {
40    fn from(err: JsonError) -> Self {
41        Error::Json(err)
42    }
43}
44
45impl From<ReqwestError> for Error {
46    fn from(err: ReqwestError) -> Self {
47        Error::Reqwest(err)
48    }
49}
50
51impl From<ReqwestUrlError> for Error {
52    fn from(err: ReqwestUrlError) -> Self {
53        Error::ReqwestParse(err)
54    }
55}
56
57impl Display for Error {
58    fn fmt(&self, f: &mut Formatter) -> FmtResult {
59        f.write_str(self.description())
60    }
61}
62
63impl StdError for Error {
64    fn description(&self) -> &str {
65        match *self {
66            Error::Json(ref inner) => inner.description(),
67            Error::Reqwest(ref inner) => inner.description(),
68            Error::ReqwestBad(_) => "Request bad",
69            Error::ReqwestInvalid(_) => "Request invalid",
70            Error::ReqwestParse(ref inner) => inner.description(),
71            Error::ReqwestUnauthorized(_) => "Request auth bad",
72        }
73    }
74}