use std::sync::mpsc;
use std::time::Duration;
#[derive(Debug, Clone, PartialEq)]
pub enum ConnectionState {
Disconnected,
Connecting,
Authenticating,
Connected,
Reconnecting { attempt: u32 },
Closed { code: Option<u16>, reason: String },
}
#[derive(Debug, Clone, PartialEq)]
pub enum ConnectionEvent {
Connecting,
Connected,
Authenticated,
Unauthenticated { message: String },
Disconnected { code: Option<u16>, reason: String },
Reconnecting { attempt: u32 },
ReconnectFailed { attempts: u32 },
HeartbeatTimeout { elapsed: Duration },
Error { message: String, code: i32 },
}
pub(crate) fn emit_event(tx: &mpsc::SyncSender<ConnectionEvent>, event: ConnectionEvent) {
if let Err(mpsc::TrySendError::Full(dropped)) = tx.try_send(event) {
eprintln!(
"[fugle-marketdata-core] event channel saturated (cap=1024); \
dropped {:?}. Consumer is likely stuck.",
dropped
);
}
}