use crate::protocol::compression::WebSocketCompressionConfig;
#[derive(Debug, Clone, Copy)]
#[non_exhaustive]
pub struct WebSocketConfig {
pub read_buffer_size: usize,
pub write_buffer_size: usize,
pub max_write_buffer_size: usize,
pub max_message_size: Option<usize>,
pub max_frame_size: Option<usize>,
pub accept_unmasked_frames: bool,
pub compression: WebSocketCompressionConfig,
}
impl Default for WebSocketConfig {
fn default() -> Self {
Self {
read_buffer_size: 128 * 1024,
write_buffer_size: 128 * 1024,
max_write_buffer_size: usize::MAX,
max_message_size: Some(64 << 20),
max_frame_size: Some(64 << 20),
accept_unmasked_frames: false,
compression: WebSocketCompressionConfig::default(),
}
}
}
impl WebSocketConfig {
pub fn read_buffer_size(mut self, size: usize) -> Self {
assert!(size > 0);
self.read_buffer_size = size;
self
}
pub fn write_buffer_size(mut self, size: usize) -> Self {
assert!(size > 0);
self.write_buffer_size = size;
self
}
pub fn max_write_buffer_size(mut self, size: usize) -> Self {
assert!(size > 0);
self.max_write_buffer_size = size;
self
}
pub fn max_message_size(mut self, size: Option<usize>) -> Self {
assert!(if size.is_some() { size.unwrap() > 0 } else { true });
self.max_message_size = size;
self
}
pub fn max_frame_size(mut self, size: Option<usize>) -> Self {
assert!(if size.is_some() { size.unwrap() > 0 } else { true });
self.max_frame_size = size;
self
}
pub fn accept_unmasked_frames(mut self, accept_unmasked_frames: bool) -> Self {
self.accept_unmasked_frames = accept_unmasked_frames;
self
}
pub(crate) fn asset_valid(&self) {
assert!(
self.max_write_buffer_size > self.write_buffer_size,
"WebSocketConfig::max_write_buffer_size must be greater than write_buffer_size, \
see WebSocketConfig docs`"
);
}
}