use std::net::SocketAddr;
use std::time::Duration;
use peashape::ShapingStrategy;
#[derive(Clone, Copy, Debug)]
#[non_exhaustive]
pub enum CoverStrategy {
Constant {
interval: Duration,
},
Poisson {
rate: f64,
},
None,
}
impl CoverStrategy {
pub(crate) fn as_shaping(&self) -> ShapingStrategy {
match *self {
CoverStrategy::Constant { interval } => ShapingStrategy::Constant { interval },
CoverStrategy::Poisson { rate } => ShapingStrategy::Poisson { rate },
CoverStrategy::None => ShapingStrategy::None,
}
}
}
#[derive(Clone, Debug)]
pub struct NodeConfig {
pub name: Option<String>,
pub listener_addr: Option<SocketAddr>,
pub bootstrap: Vec<SocketAddr>,
pub view_size: usize,
pub sample_size: usize,
pub exchange_interval: Duration,
pub cover: CoverStrategy,
pub frame_size: usize,
pub max_frame_size: usize,
pub max_connections: u16,
pub max_connections_per_ip: u16,
pub reuse_listener_port: bool,
}
impl Default for NodeConfig {
fn default() -> Self {
Self {
name: None,
listener_addr: None,
bootstrap: Vec::new(),
view_size: 24,
sample_size: 8,
exchange_interval: Duration::from_millis(500),
cover: CoverStrategy::Constant {
interval: Duration::from_millis(100),
},
frame_size: 256,
max_frame_size: 1024 * 1024,
max_connections: 64,
max_connections_per_ip: 8,
reuse_listener_port: false,
}
}
}