rusty_feeder/exchange/binance/common/
ws.rs

1use serde::{Deserialize, Serialize};
2use smallvec::SmallVec;
3use smartstring::alias::String;
4
5/// Default WebSocket connection timeout in milliseconds
6pub const DEFAULT_TIMEOUT_MS: u64 = 10_000;
7/// Default ping interval in milliseconds (3 minutes as per Binance docs)
8pub const DEFAULT_PING_INTERVAL_MS: u64 = 3 * 60 * 1000;
9/// Default maximum WebSocket frame size (16MB)
10pub const DEFAULT_MAX_FRAME_SIZE: usize = 16 * 1024 * 1024;
11
12// WebSocket connection limits
13/// Maximum connections per IP address in 5 minutes
14pub const MAX_CONNECTIONS_PER_IP_5_MIN: u32 = 300;
15/// Maximum incoming messages per second
16pub const MAX_INCOMING_MESSAGES_PER_SECOND: u32 = 5;
17
18// Stream limits
19/// Maximum streams per WebSocket connection
20pub const MAX_STREAMS_PER_CONNECTION: u32 = 1024;
21
22/// Base structure for WebSocket subscriptions
23#[derive(Debug, Serialize, Deserialize)]
24pub struct WebSocketSubscription {
25    /// Method (e.g., SUBSCRIBE, UNSUBSCRIBE)
26    pub method: String,
27
28    /// List of channels to subscribe to
29    pub params: SmallVec<[String; 8]>,
30
31    /// Request ID for tracking the subscription
32    pub id: u64,
33}
34
35/// Creates a subscription message for WebSocket connection
36#[inline]
37pub fn create_subscription(channels: SmallVec<[String; 8]>, id: u64) -> WebSocketSubscription {
38    WebSocketSubscription {
39        method: "SUBSCRIBE".into(),
40        params: channels,
41        id,
42    }
43}
44
45/// Creates an unsubscription message for WebSocket connection
46#[inline]
47pub fn create_unsubscription(channels: SmallVec<[String; 8]>, id: u64) -> WebSocketSubscription {
48    WebSocketSubscription {
49        method: "UNSUBSCRIBE".into(),
50        params: channels,
51        id,
52    }
53}