barter_integration/
error.rs

1use crate::subscription::SubscriptionId;
2use reqwest::Error;
3use thiserror::Error;
4
5/// All socket IO related errors generated in `barter-integration`.
6#[derive(Debug, Error)]
7pub enum SocketError {
8    #[error("Sink error")]
9    Sink,
10
11    #[error("Deserialising JSON error: {error} for payload: {payload}")]
12    Deserialise {
13        error: serde_json::Error,
14        payload: String,
15    },
16
17    #[error("Deserialising JSON error: {error} for binary payload: {payload:?}")]
18    DeserialiseBinary {
19        error: serde_json::Error,
20        payload: Vec<u8>,
21    },
22
23    #[error("Serialising JSON error: {0}")]
24    Serialise(serde_json::Error),
25
26    #[error("SerDe Query String serialisation error: {0}")]
27    QueryParams(#[from] serde_qs::Error),
28
29    #[error("SerDe url encoding serialisation error: {0}")]
30    UrlEncoded(#[from] serde_urlencoded::ser::Error),
31
32    #[error("error parsing Url: {0}")]
33    UrlParse(#[from] url::ParseError),
34
35    #[error("error subscribing to resources over the socket: {0}")]
36    Subscribe(String),
37
38    #[error("ExchangeStream terminated with closing frame: {0}")]
39    Terminated(String),
40
41    #[error("{entity} does not support: {item}")]
42    Unsupported { entity: String, item: String },
43
44    #[error("WebSocket error: {0}")]
45    WebSocket(Box<tokio_tungstenite::tungstenite::Error>),
46
47    #[error("HTTP error: {0}")]
48    Http(reqwest::Error),
49
50    #[error("HTTP request timed out")]
51    HttpTimeout(reqwest::Error),
52
53    /// REST http response error
54    #[error("HTTP response (status={0}) error: {1}")]
55    HttpResponse(reqwest::StatusCode, String),
56
57    #[error("consumed unidentifiable message: {0}")]
58    Unidentifiable(SubscriptionId),
59
60    #[error("consumed error message from execution: {0}")]
61    Exchange(String),
62}
63
64impl From<reqwest::Error> for SocketError {
65    fn from(error: Error) -> Self {
66        match error {
67            error if error.is_timeout() => SocketError::HttpTimeout(error),
68            error => SocketError::Http(error),
69        }
70    }
71}