jqdata_blocking/
error.rs

1use serde::de;
2use std::fmt;
3
4#[derive(Debug)]
5pub enum Error {
6    Reqwest(reqwest::Error),
7    Server(String),
8    Client(String),
9    Serde(String),
10    Csv(csv::Error),
11    Json(serde_json::Error),
12    Io(std::io::Error),
13    Utf8(std::str::Utf8Error),
14}
15
16impl fmt::Display for Error {
17    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18        match *self {
19            Error::Reqwest(ref err) => write!(f, "Reqwest error: {}", err),
20            Error::Server(ref s) => write!(f, "Server error: {}", s),
21            Error::Client(ref s) => write!(f, "Client error: {}", s),
22            Error::Serde(ref s) => write!(f, "Serde error: {}", s),
23            Error::Csv(ref err) => write!(f, "Csv error: {}", err),
24            Error::Json(ref err) => write!(f, "Json error: {}", err),
25            Error::Io(ref err) => write!(f, "Io error: {}", err),
26            Error::Utf8(ref err) => write!(f, "Utf8 error: {}", err),
27        }
28    }
29}
30
31impl std::error::Error for Error {
32    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
33        match *self {
34            Error::Reqwest(ref err) => Some(err),
35            Error::Server(..) => None,
36            Error::Client(..) => None,
37            Error::Serde(..) => None,
38            Error::Csv(ref err) => Some(err),
39            Error::Json(ref err) => Some(err),
40            Error::Io(ref err) => Some(err),
41            Error::Utf8(ref err) => Some(err),
42        }
43    }
44}
45
46impl From<reqwest::Error> for Error {
47    fn from(err: reqwest::Error) -> Error {
48        Error::Reqwest(err)
49    }
50}
51
52impl From<csv::Error> for Error {
53    fn from(err: csv::Error) -> Error {
54        Error::Csv(err)
55    }
56}
57
58impl From<serde_json::Error> for Error {
59    fn from(err: serde_json::Error) -> Error {
60        Error::Json(err)
61    }
62}
63
64impl From<std::io::Error> for Error {
65    fn from(err: std::io::Error) -> Error {
66        Error::Io(err)
67    }
68}
69
70impl From<std::string::FromUtf8Error> for Error {
71    fn from(err: std::string::FromUtf8Error) -> Error {
72        Error::Utf8(err.utf8_error())
73    }
74}
75
76impl From<std::num::ParseIntError> for Error {
77    fn from(err: std::num::ParseIntError) -> Error {
78        Error::Server(format!("{}", err))
79    }
80}
81
82/// when deserailizing, the serde framework requires
83/// the ability to convert local error to serde::de::Error
84impl de::Error for Error {
85    fn custom<T>(msg: T) -> Self
86    where
87        T: fmt::Display,
88    {
89        Error::Serde(format!("{}", msg))
90    }
91}