use std::cmp;
use crate::codec::MAX_FRAME_SIZE;
pub(crate) const DEFAULT_MPLEX_PROTOCOL_NAME: &str = "/mplex/6.7.0";
#[derive(Debug, Clone)]
pub struct Config {
pub(crate) max_substreams: usize,
pub(crate) max_buffer_len: usize,
pub(crate) max_buffer_behaviour: MaxBufferBehaviour,
pub(crate) split_send_size: usize,
pub(crate) protocol_name: &'static str,
}
impl Config {
pub fn new() -> Config {
Default::default()
}
pub fn set_max_num_streams(&mut self, max: usize) -> &mut Self {
self.max_substreams = max;
self
}
pub fn set_max_buffer_size(&mut self, max: usize) -> &mut Self {
self.max_buffer_len = max;
self
}
pub fn set_max_buffer_behaviour(&mut self, behaviour: MaxBufferBehaviour) -> &mut Self {
self.max_buffer_behaviour = behaviour;
self
}
pub fn set_split_send_size(&mut self, size: usize) -> &mut Self {
let size = cmp::min(size, MAX_FRAME_SIZE);
self.split_send_size = size;
self
}
pub fn set_protocol_name(&mut self, protocol_name: &'static str) -> &mut Self {
self.protocol_name = protocol_name;
self
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum MaxBufferBehaviour {
ResetStream,
Block,
}
impl Default for Config {
fn default() -> Config {
Config {
max_substreams: 128,
max_buffer_len: 32,
max_buffer_behaviour: MaxBufferBehaviour::Block,
split_send_size: 8 * 1024,
protocol_name: DEFAULT_MPLEX_PROTOCOL_NAME,
}
}
}