asterisk_ari_client_rs/
errors.rs

1use reqwest::header::InvalidHeaderValue;
2use reqwest::Error as ReqwError;
3use reqwest::StatusCode;
4use std::result;
5use tokio_tungstenite::tungstenite::Error as WSError;
6use url::ParseError;
7
8#[derive(Debug)]
9pub enum Error {
10    Serde(serde_json::Error),
11    Utf8(std::string::FromUtf8Error),
12    Api(ApiError),
13    HttpInvalidHeader(InvalidHeaderValue),
14    Http(ReqwError),
15    UrlParse(ParseError),
16    Websocket(WSError),
17}
18
19impl Error {
20    pub fn new(code: StatusCode, content: Option<String>) -> Self {
21        Error::Api(ApiError { code, content })
22    }
23}
24
25pub type Result<T> = result::Result<T, Error>;
26
27#[derive(Debug)]
28pub struct ApiError {
29    pub code: StatusCode,
30    pub content: Option<String>,
31}
32
33impl From<serde_json::Error> for Error {
34    fn from(e: serde_json::Error) -> Self {
35        Error::Serde(e)
36    }
37}
38
39impl From<std::string::FromUtf8Error> for Error {
40    fn from(e: std::string::FromUtf8Error) -> Self {
41        Error::Utf8(e)
42    }
43}
44
45impl From<ParseError> for Error {
46    fn from(e: ParseError) -> Self {
47        Error::UrlParse(e)
48    }
49}
50
51impl From<WSError> for Error {
52    fn from(e: WSError) -> Self {
53        Error::Websocket(e)
54    }
55}
56
57impl From<InvalidHeaderValue> for Error {
58    fn from(e: InvalidHeaderValue) -> Self {
59        Error::HttpInvalidHeader(e)
60    }
61}
62
63impl From<ReqwError> for Error {
64    fn from(e: ReqwError) -> Self {
65        Error::Http(e)
66    }
67}