use std::time::Duration;
use crate::protocol::heartbeat::HeartbeatPolicy;
#[derive(Debug, Clone)]
pub struct ServerConfig {
pub max_payload_bytes: usize,
pub max_topics_per_connection: usize,
pub max_send_queue_bytes: usize,
pub heartbeat: HeartbeatPolicy,
pub idle_timeout: Duration,
pub reconnect_base_ms: u32,
pub reconnect_max_ms: u32,
pub replay_window: Duration,
pub dedupe_window: Duration,
pub max_auth_failures: u32,
pub codec_offer: Vec<CodecOffer>,
pub default_topic_profile: DefaultTopicProfile,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CodecOffer {
Json,
Cbor,
}
#[derive(Debug, Clone)]
pub struct DefaultTopicProfile {
pub retention: crate::topic::retention::RetentionPolicy,
pub ordering: crate::topic::ordering::OrderingPolicy,
pub max_subscribers: usize,
pub max_publishers: usize,
pub replay_enabled: bool,
pub snapshot_enabled: bool,
}
impl Default for ServerConfig {
fn default() -> Self {
Self {
max_payload_bytes: 65_536,
max_topics_per_connection: 128,
max_send_queue_bytes: 1_048_576,
heartbeat: HeartbeatPolicy::default(),
idle_timeout: Duration::from_secs(300),
reconnect_base_ms: 500,
reconnect_max_ms: 15_000,
replay_window: Duration::from_secs(300),
dedupe_window: Duration::from_secs(60),
max_auth_failures: 3,
codec_offer: Vec::new(),
default_topic_profile: DefaultTopicProfile::default(),
}
}
}
impl Default for DefaultTopicProfile {
fn default() -> Self {
Self {
retention: crate::topic::retention::RetentionPolicy::Latest,
ordering: crate::topic::ordering::OrderingPolicy::Topic,
max_subscribers: 10_000,
max_publishers: 10_000,
replay_enabled: true,
snapshot_enabled: true,
}
}
}