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