Skip to main content

wsio_core/
lib.rs

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}