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
12pub type Result<T> = StdResult<T, Error>;
17
18#[derive(Debug)]
21pub enum Error {
22 Json(JsonError),
27 Reqwest(ReqwestError),
29 ReqwestBad(Box<ReqwestResponse>),
31 ReqwestInvalid(Box<ReqwestResponse>),
33 ReqwestParse(ReqwestUrlError),
35 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}