1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
4pub struct RealtimeOptions {
5 pub reconnect: ReconnectPolicy,
6 pub event_buffer: usize,
7 pub subscriptions: Vec<RealtimeSubscription>,
8}
9
10impl Default for RealtimeOptions {
11 fn default() -> Self {
12 Self {
13 reconnect: ReconnectPolicy::Disabled,
14 event_buffer: 128,
15 subscriptions: vec![
16 RealtimeSubscription::Messages,
17 RealtimeSubscription::Groups,
18 RealtimeSubscription::Notifications,
19 ],
20 }
21 }
22}
23
24#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
25pub enum RealtimeSubscription {
26 Messages,
27 Groups,
28 Notifications,
29 HostNotifications,
30}
31
32#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
33pub enum ReconnectPolicy {
34 Disabled,
35 Fixed {
36 delay_ms: u64,
37 max_attempts: Option<u32>,
38 },
39 Exponential {
40 base_delay_ms: u64,
41 max_delay_ms: u64,
42 max_attempts: Option<u32>,
43 },
44}
45
46#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
47pub struct RealtimeStatus {
48 pub connected: bool,
49 pub state: RealtimeConnectionState,
50 pub subscriptions: Vec<RealtimeSubscription>,
51 pub last_error: Option<String>,
52}
53
54#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
55pub struct RealtimeExit {
56 pub reason: RealtimeExitReason,
57 pub reconnect_attempts: u32,
58 pub warnings: Vec<String>,
59}
60
61#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
62pub enum RealtimeExitReason {
63 ShutdownRequested,
64 ConnectionClosed,
65 AuthFailed,
66 TransportUnavailable,
67 FatalError,
68}
69
70#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
71pub enum RealtimeConnectionState {
72 Disconnected,
73 Connecting,
74 Connected,
75 Reconnecting,
76 Closed,
77}