use std::env;
use std::env::VarError;
use std::time::Duration;
#[non_exhaustive]
pub struct RouterConfig {
pub ping_interval: Duration,
pub ping_timeout: Duration,
pub broadcast_backlog: usize,
pub forward_timeout: Duration,
pub high_buffer_mark: usize,
pub gc_interval: Option<Duration>,
}
impl Default for RouterConfig {
fn default() -> Self {
RouterConfig {
ping_timeout: Duration::from_secs(20),
ping_interval: Duration::from_secs(10),
forward_timeout: Duration::from_secs(60),
broadcast_backlog: 16,
gc_interval: None,
high_buffer_mark: 16,
}
}
}
impl RouterConfig {
pub fn from_env() -> Self {
env::var("GSB_PING_TIMEOUT")
.and_then(|s| s.parse().map_err(|_| VarError::NotPresent))
.map(|secs| RouterConfig {
ping_timeout: Duration::from_secs(secs),
ping_interval: Duration::from_secs(secs / 4),
..Default::default()
})
.unwrap_or_else(|_| Default::default())
}
pub fn gc_interval_secs(&mut self, gc_secs: u64) -> &mut Self {
self.gc_interval = Some(Duration::from_secs(gc_secs));
self
}
}