Skip to main content

oxigdal_websocket/
error.rs

1//! Error types for oxigdal-websocket
2
3use thiserror::Error;
4
5/// Result type for oxigdal-websocket operations
6pub type Result<T> = std::result::Result<T, Error>;
7
8/// Error types for WebSocket operations
9#[derive(Error, Debug)]
10pub enum Error {
11    /// WebSocket error
12    #[error("WebSocket error: {0}")]
13    WebSocket(String),
14
15    /// Connection error
16    #[error("Connection error: {0}")]
17    Connection(String),
18
19    /// Protocol error
20    #[error("Protocol error: {0}")]
21    Protocol(String),
22
23    /// Serialization error
24    #[error("Serialization error: {0}")]
25    Serialization(String),
26
27    /// Compression error
28    #[error("Compression error: {0}")]
29    Compression(String),
30
31    /// Broadcast error
32    #[error("Broadcast error: {0}")]
33    Broadcast(String),
34
35    /// Room error
36    #[error("Room error: {0}")]
37    Room(String),
38
39    /// Subscription error
40    #[error("Subscription error: {0}")]
41    Subscription(String),
42
43    /// Channel error
44    #[error("Channel error: {0}")]
45    Channel(String),
46
47    /// Timeout error
48    #[error("Timeout error: {0}")]
49    Timeout(String),
50
51    /// Invalid message error
52    #[error("Invalid message: {0}")]
53    InvalidMessage(String),
54
55    /// Invalid state error
56    #[error("Invalid state: {0}")]
57    InvalidState(String),
58
59    /// Resource exhausted error
60    #[error("Resource exhausted: {0}")]
61    ResourceExhausted(String),
62
63    /// IO error
64    #[error("IO error: {0}")]
65    Io(#[from] std::io::Error),
66
67    /// JSON error
68    #[error("JSON error: {0}")]
69    Json(#[from] serde_json::Error),
70
71    /// MessagePack error
72    #[error("MessagePack error: {0}")]
73    MessagePack(String),
74
75    /// OxiGDAL core error
76    #[error("OxiGDAL core error: {0}")]
77    Core(#[from] oxigdal_core::error::OxiGdalError),
78}
79
80impl From<tokio_tungstenite::tungstenite::Error> for Error {
81    fn from(err: tokio_tungstenite::tungstenite::Error) -> Self {
82        Error::WebSocket(err.to_string())
83    }
84}
85
86impl<T> From<tokio::sync::mpsc::error::SendError<T>> for Error {
87    fn from(err: tokio::sync::mpsc::error::SendError<T>) -> Self {
88        Error::Channel(err.to_string())
89    }
90}
91
92impl From<rmp_serde::encode::Error> for Error {
93    fn from(err: rmp_serde::encode::Error) -> Self {
94        Error::MessagePack(err.to_string())
95    }
96}
97
98impl From<rmp_serde::decode::Error> for Error {
99    fn from(err: rmp_serde::decode::Error) -> Self {
100        Error::MessagePack(err.to_string())
101    }
102}