1use std::time::Duration;
10
11#[derive(Debug, thiserror::Error)]
15pub enum CodecError {
16 #[error("JSON serialization failed: {0}")]
17 Serialize(#[source] serde_json::Error),
18 #[error("JSON deserialization failed: {0}")]
19 Deserialize(#[source] serde_json::Error),
20}
21
22#[derive(Debug, thiserror::Error)]
26pub enum ConnectError {
27 #[error("DNS resolution failed: {0}")]
28 Dns(#[source] Box<dyn std::error::Error + Send + Sync>),
29 #[error("TLS handshake failed: {0}")]
30 Tls(#[source] Box<dyn std::error::Error + Send + Sync>),
31 #[error("connection timed out after {0:?}")]
32 Timeout(Duration),
33 #[error("WebSocket handshake rejected: {status}")]
34 Rejected { status: u16 },
35 #[error("WebSocket error: {0}")]
36 Ws(#[source] tokio_tungstenite::tungstenite::Error),
37}
38
39#[derive(Debug, thiserror::Error)]
41pub enum SendError {
42 #[error("connection closed")]
43 Closed,
44 #[error("WebSocket send failed: {0}")]
45 Ws(#[source] tokio_tungstenite::tungstenite::Error),
46}
47
48#[derive(Debug, thiserror::Error)]
50pub enum RecvError {
51 #[error("connection closed")]
52 Closed,
53 #[error("WebSocket receive failed: {0}")]
54 Ws(#[source] tokio_tungstenite::tungstenite::Error),
55}
56
57#[derive(Debug, thiserror::Error)]
61pub enum SessionError {
62 #[error("setup failed: {0}")]
63 SetupFailed(String),
64 #[error("setup timed out after {0:?}")]
65 SetupTimeout(Duration),
66 #[error("API error: {0}")]
67 Api(String),
68 #[error("connection lost and reconnection failed after {attempts} attempts")]
69 ReconnectExhausted { attempts: u32 },
70 #[error("session closed")]
71 Closed,
72 #[error(transparent)]
73 Transport(#[from] SendError),
74 #[error(transparent)]
75 Codec(#[from] CodecError),
76}