use std::net::SocketAddr;
use std::path::PathBuf;
use std::time::Duration;
#[derive(Debug, Clone, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ServerConfig {
pub listen_address: SocketAddr,
pub health_listen_address: SocketAddr,
pub drain_timeout_ms: u64,
pub channels: Vec<ChannelDef>,
pub routing_rules: Vec<RoutingRuleDef>,
pub persistence_path: Option<PathBuf>,
pub cluster: Option<ClusterConfig>,
}
impl ServerConfig {
#[must_use]
pub const fn drain_timeout(&self) -> Duration {
Duration::from_millis(self.drain_timeout_ms)
}
}
#[derive(Debug, Clone, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ChannelDef {
pub name: String,
pub schema_ref: String,
pub durable: bool,
}
#[derive(Debug, Clone, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct RoutingRuleDef {
pub source_channel: String,
pub target_channel: String,
pub predicate: Option<String>,
}
pub const DEFAULT_COOKIE: &str = "beamr-cookie";
#[derive(Debug, Clone, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ClusterConfig {
pub node_name: String,
pub listen_address: SocketAddr,
pub seed_nodes: Vec<SocketAddr>,
#[serde(default = "default_cookie")]
pub cookie: String,
}
fn default_cookie() -> String {
DEFAULT_COOKIE.to_owned()
}