Skip to main content

im_core/realtime/
dto.rs

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}