volli-manager 0.1.12

Manager for volli
Documentation
use ipnet::IpNet;
use std::sync::Arc;
use volli_core::{DEFAULT_QUIC_PORT, DEFAULT_TCP_PORT, ManagerPeerEntry};

/// Options for configuring the manager server.
#[derive(Clone, Debug)]
pub struct ServerConfigOpts {
    pub advertise_host: String,
    pub bind: String,
    pub tcp_port: u16,
    pub quic_port: u16,
    pub cert: Option<String>,
    pub key: Option<String>,
    pub token: Option<String>,
    pub secret_dir: Option<String>,
    pub profile: String,
    pub manager_name: Option<String>,
    pub max_connections: usize,
    pub max_conn_rate: usize,
    pub conn_rate_interval: std::time::Duration,
    pub max_worker_conn_rate: usize,
    pub worker_conn_rate_interval: std::time::Duration,
    pub handshake_timeout_ms: u64,
    pub worker_whitelist: Option<Vec<String>>,
    pub manager_whitelist: Option<Vec<String>>,
    pub max_workers: Option<u32>,
    pub peers: Vec<ManagerPeerEntry>,
    /// Test-only: disable network listeners to speed up non-network tests
    pub test_disable_listeners: bool,
}

impl Default for ServerConfigOpts {
    fn default() -> Self {
        Self {
            advertise_host: "127.0.0.1".into(),
            bind: "127.0.0.1".into(),
            tcp_port: DEFAULT_TCP_PORT,
            quic_port: DEFAULT_QUIC_PORT,
            cert: None,
            key: None,
            token: None,
            secret_dir: None,
            profile: "default".into(),
            manager_name: None,
            max_connections: 1000,
            max_conn_rate: 0,
            conn_rate_interval: std::time::Duration::from_secs(1),
            max_worker_conn_rate: 0,
            worker_conn_rate_interval: std::time::Duration::from_secs(1),
            handshake_timeout_ms: 5000,
            worker_whitelist: None,
            manager_whitelist: None,
            max_workers: None,
            peers: vec![],
            test_disable_listeners: false,
        }
    }
}

pub(crate) fn parse_nets(list: &Option<Vec<String>>) -> Arc<Vec<IpNet>> {
    Arc::new(
        list.clone()
            .unwrap_or_default()
            .into_iter()
            .filter_map(|s| s.parse().ok())
            .collect(),
    )
}