Skip to main content

barter_integration/
error.rs

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