1#![cfg_attr(test, allow(clippy::expect_used, clippy::unwrap_used))]
2
3use tungstenite::protocol::WebSocketConfig;
4
5pub mod event;
6pub mod packet;
7pub mod traits;
8pub mod types;
9pub mod utils;
10
11pub fn channel_capacity_from_websocket_config(websocket_config: &WebSocketConfig) -> usize {
12 let ratio = (websocket_config.max_write_buffer_size as f64 / websocket_config.write_buffer_size as f64).max(1.0);
13 let capacity = (ratio.log2() * 256.0).round() as usize;
14 capacity.clamp(64, 16384)
15}
16
17#[cfg(test)]
18mod tests {
19 use super::*;
20
21 #[test]
22 fn test_channel_capacity_from_websocket_config() {
23 let mut config = WebSocketConfig::default();
24
25 config.write_buffer_size = 1024;
26 config.max_write_buffer_size = 1024 * 16;
27 assert_eq!(channel_capacity_from_websocket_config(&config), 1024);
28
29 config.write_buffer_size = 1024;
30 config.max_write_buffer_size = 512;
31 assert_eq!(channel_capacity_from_websocket_config(&config), 64);
32
33 config.write_buffer_size = 1024;
34 config.max_write_buffer_size = 1024 * 1024 * 1024;
35 assert_eq!(channel_capacity_from_websocket_config(&config), 5120);
36
37 config.write_buffer_size = 1;
38 config.max_write_buffer_size = 1024 * 1024 * 1024 * 1024;
39 assert_eq!(channel_capacity_from_websocket_config(&config), 10240);
40
41 config.write_buffer_size = 1;
42 config.max_write_buffer_size = usize::MAX;
43 assert_eq!(channel_capacity_from_websocket_config(&config), 16384);
44 }
45}