barter_integration/
error.rs1use crate::subscription::SubscriptionId;
2use reqwest::Error;
3use thiserror::Error;
4
5#[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 #[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}