im-core 0.1.0

Rust IM SDK for Awiki clients built on Agent Network Protocol (ANP)
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RealtimeOptions {
    pub reconnect: ReconnectPolicy,
    pub event_buffer: usize,
    pub subscriptions: Vec<RealtimeSubscription>,
}

impl Default for RealtimeOptions {
    fn default() -> Self {
        Self {
            reconnect: ReconnectPolicy::Disabled,
            event_buffer: 128,
            subscriptions: vec![
                RealtimeSubscription::Messages,
                RealtimeSubscription::Groups,
                RealtimeSubscription::Notifications,
            ],
        }
    }
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RealtimeSubscription {
    Messages,
    Groups,
    Notifications,
    HostNotifications,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReconnectPolicy {
    Disabled,
    Fixed {
        delay_ms: u64,
        max_attempts: Option<u32>,
    },
    Exponential {
        base_delay_ms: u64,
        max_delay_ms: u64,
        max_attempts: Option<u32>,
    },
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RealtimeStatus {
    pub connected: bool,
    pub state: RealtimeConnectionState,
    pub subscriptions: Vec<RealtimeSubscription>,
    pub last_error: Option<String>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RealtimeExit {
    pub reason: RealtimeExitReason,
    pub reconnect_attempts: u32,
    pub warnings: Vec<String>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RealtimeExitReason {
    ShutdownRequested,
    ConnectionClosed,
    AuthFailed,
    TransportUnavailable,
    FatalError,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RealtimeConnectionState {
    Disconnected,
    Connecting,
    Connected,
    Reconnecting,
    Closed,
}