use std::time::Duration;
#[derive(Debug, Clone, PartialEq)]
pub struct WriterMetrics {
pub frames_written: u64,
pub bytes_written: u64,
pub frames_dropped: u64,
pub buffer_size: usize,
pub avg_write_latency: Duration,
pub error_count: u64,
}
impl Default for WriterMetrics {
fn default() -> Self {
Self {
frames_written: 0,
bytes_written: 0,
frames_dropped: 0,
buffer_size: 0,
avg_write_latency: Duration::ZERO,
error_count: 0,
}
}
}
#[derive(Debug, Clone)]
pub struct WriterConfig {
pub buffer_size: usize,
pub write_timeout: Duration,
pub enable_compression: bool,
pub max_frame_size: usize,
pub backpressure_strategy: BackpressureStrategy,
}
impl Default for WriterConfig {
fn default() -> Self {
Self {
buffer_size: 1024,
write_timeout: Duration::from_secs(30),
enable_compression: true,
max_frame_size: 1024 * 1024, backpressure_strategy: BackpressureStrategy::DropLowPriority,
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum BackpressureStrategy {
Block,
DropLowPriority,
DropOldest,
Error,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ConnectionState {
Active,
Unavailable,
Closing,
Closed,
Error(String),
}
#[derive(Debug, Clone, PartialEq)]
pub struct ConnectionMetrics {
pub rtt: Duration,
pub bandwidth: u64,
pub uptime: Duration,
pub reconnect_count: u32,
pub last_error: Option<String>,
}
impl Default for ConnectionMetrics {
fn default() -> Self {
Self {
rtt: Duration::from_millis(50),
bandwidth: 1_000_000, uptime: Duration::ZERO,
reconnect_count: 0,
last_error: None,
}
}
}