rusty_common/websocket/exchanges/
bithumb.rs

1//! Bithumb WebSocket configuration
2//!
3//! Bithumb-specific WebSocket settings and handlers.
4
5use crate::types::Exchange;
6use crate::websocket::{CompressionConfig, WebSocketConfig};
7use std::time::Duration;
8
9/// Get default Bithumb WebSocket configuration
10pub fn default_config(url: String) -> WebSocketConfig {
11    WebSocketConfig::builder(Exchange::Bithumb, url)
12        .connect_timeout(Duration::from_secs(10))
13        .timeout(Duration::from_secs(30))
14        .ping_interval(Duration::from_secs(30))
15        .pong_timeout(Duration::from_secs(10))
16        .max_frame_size(65536) // 64KB
17        .max_message_size(10 * 1024 * 1024) // 10MB
18        // Bithumb supports compression
19        .compression(CompressionConfig::default())
20        .build()
21}
22
23/// Bithumb WebSocket URLs
24pub mod urls {
25    /// Public WebSocket URL
26    pub const PUBLIC: &str = "wss://pubwss.bithumb.com/pub/ws";
27
28    /// Private WebSocket URL
29    pub const PRIVATE: &str = "wss://wspri.bithumb.com:8443/connect";
30}
31
32/// Create a subscription message for Bithumb public data
33pub fn create_public_subscription(
34    symbols: Vec<String>,
35    types: Vec<String>,
36    tick_types: Option<Vec<String>>,
37) -> simd_json::OwnedValue {
38    let mut msg = simd_json::json!({
39        "type": "ticker",
40        "symbols": symbols,
41        "tickTypes": types
42    });
43
44    if let Some(tick_types) = tick_types {
45        msg["tickTypes"] = simd_json::json!(tick_types);
46    }
47
48    msg
49}
50
51/// Create a subscription message for Bithumb private data
52pub fn create_private_subscription(
53    api_key: &str,
54    secret_key: &str,
55    types: Vec<String>,
56) -> simd_json::OwnedValue {
57    simd_json::json!({
58        "type": "subscribe",
59        "apiKey": api_key,
60        "secretKey": secret_key,
61        "symbols": types
62    })
63}