1use thiserror::Error;
7
8pub type Result<T> = anyhow::Result<T, ZelloError>;
10
11#[derive(Debug, Error)]
13pub enum ZelloError {
14 #[error("Connection error: {0}")]
16 ConnectionError(String),
17
18 #[error("Authentication error: {0}")]
20 AuthenticationError(String),
21
22 #[error("Protocol error: {0}")]
24 ProtocolError(String),
25
26 #[error("Other error: {0}")]
28 Other(#[from] Box<dyn std::error::Error + Send + Sync>),
29
30 #[error("IO error: {0}")]
32 IoError(#[from] std::io::Error),
33
34 #[error("JSON error: {0}")]
36 JsonError(#[from] serde_json::Error),
37
38 #[error("WebSocket error: {0}")]
40 WebSocketError(#[from] Box<tokio_tungstenite::tungstenite::Error>),
41
42 #[error("Audio error: {0}")]
44 AudioError(String),
45
46 #[error("Client is not connected")]
48 NotConnected,
49
50 #[error("Configuration error: {0}")]
52 ConfigError(String),
53
54 #[error("Operation timed out")]
56 Timeout,
57
58 #[error("Channel error: {0}")]
60 ChannelError(String),
61
62 #[error("Unknown error: {0}")]
64 Unknown(String),
65}
66
67impl From<tokio_tungstenite::tungstenite::Error> for ZelloError {
68 fn from(err: tokio_tungstenite::tungstenite::Error) -> Self {
69 Self::WebSocketError(Box::new(err))
70 }
71}
72
73impl From<Box<dyn std::error::Error>> for ZelloError {
74 fn from(err: Box<dyn std::error::Error>) -> Self {
75 ZelloError::Other(format!("{err}").into())
76 }
77}