Skip to main content

wsio_core/
lib.rs

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}