Skip to main content

supabase_client_realtime/
error.rs

1use std::time::Duration;
2
3use crate::types::ChannelState;
4use supabase_client_core::SupabaseError;
5
6#[derive(Debug, thiserror::Error)]
7pub enum RealtimeError {
8    #[error("Invalid configuration: {0}")]
9    InvalidConfig(String),
10
11    #[cfg(not(target_arch = "wasm32"))]
12    #[error("WebSocket error: {0}")]
13    WebSocket(#[from] tokio_tungstenite::tungstenite::Error),
14
15    #[cfg(target_arch = "wasm32")]
16    #[error("WebSocket error: {0}")]
17    WebSocket(String),
18
19    #[error("URL parse error: {0}")]
20    UrlParse(#[from] url::ParseError),
21
22    #[error("Serialization error: {0}")]
23    Serialization(#[from] serde_json::Error),
24
25    #[error("Channel not found: {0}")]
26    ChannelNotFound(String),
27
28    #[error("Channel already exists: {0}")]
29    ChannelAlreadyExists(String),
30
31    #[error("Invalid channel state: expected {expected:?}, actual {actual:?}")]
32    InvalidChannelState {
33        expected: ChannelState,
34        actual: ChannelState,
35    },
36
37    #[error("Subscribe timed out after {0:?}")]
38    SubscribeTimeout(Duration),
39
40    #[error("Connection closed")]
41    ConnectionClosed,
42
43    #[error("Server error: {0}")]
44    ServerError(String),
45
46    #[error("Internal error: {0}")]
47    Internal(String),
48}
49
50impl From<RealtimeError> for SupabaseError {
51    fn from(e: RealtimeError) -> Self {
52        SupabaseError::Realtime(e.to_string())
53    }
54}