use std::time::Duration;
#[derive(Debug, Clone)]
pub struct Config {
pub initial_stream_window: u32,
pub max_frame_size: u32,
pub max_streams: usize,
pub keepalive_interval: Option<Duration>,
pub keepalive_timeout: Duration,
pub open_timeout: Duration,
}
impl Config {
pub const DEFAULT_INITIAL_STREAM_WINDOW: u32 = 256 * 1024;
pub const DEFAULT_MAX_FRAME_SIZE: u32 = 64 * 1024;
pub const DEFAULT_MAX_STREAMS: usize = 1024;
pub const DEFAULT_KEEPALIVE_INTERVAL: Duration = Duration::from_secs(30);
pub const DEFAULT_KEEPALIVE_TIMEOUT: Duration = Duration::from_secs(30);
pub const DEFAULT_OPEN_TIMEOUT: Duration = Duration::from_secs(10);
pub fn builder() -> ConfigBuilder {
ConfigBuilder::default()
}
}
impl Default for Config {
fn default() -> Self {
Self {
initial_stream_window: Self::DEFAULT_INITIAL_STREAM_WINDOW,
max_frame_size: Self::DEFAULT_MAX_FRAME_SIZE,
max_streams: Self::DEFAULT_MAX_STREAMS,
keepalive_interval: Some(Self::DEFAULT_KEEPALIVE_INTERVAL),
keepalive_timeout: Self::DEFAULT_KEEPALIVE_TIMEOUT,
open_timeout: Self::DEFAULT_OPEN_TIMEOUT,
}
}
}
#[derive(Debug, Clone, Default)]
pub struct ConfigBuilder {
inner: Config,
}
impl ConfigBuilder {
#[must_use]
pub fn initial_stream_window(mut self, bytes: u32) -> Self {
self.inner.initial_stream_window = bytes.max(1);
self
}
#[must_use]
pub fn max_frame_size(mut self, bytes: u32) -> Self {
self.inner.max_frame_size = bytes.max(1);
self
}
#[must_use]
pub fn max_streams(mut self, n: usize) -> Self {
self.inner.max_streams = n.max(1);
self
}
#[must_use]
pub fn keepalive_interval(mut self, every: Option<Duration>) -> Self {
self.inner.keepalive_interval = every;
self
}
#[must_use]
pub fn keepalive_timeout(mut self, dur: Duration) -> Self {
self.inner.keepalive_timeout = dur;
self
}
#[must_use]
pub fn open_timeout(mut self, dur: Duration) -> Self {
self.inner.open_timeout = dur;
self
}
pub fn build(self) -> Config {
self.inner
}
}