Skip to main content

sol_parser_sdk/shredstream/
config.rs

1//! ShredStream 配置
2
3/// ShredStream 客户端配置
4#[derive(Clone)]
5pub struct ShredStreamConfig {
6    /// 可选的服务商认证令牌,通过订阅请求的 `x-token` metadata 发送。
7    /// 首尾空白会被移除,空字符串视为未配置。
8    pub auth_token: Option<String>,
9    /// 连接超时(毫秒)
10    pub connection_timeout_ms: u64,
11    /// 请求超时(毫秒)
12    pub request_timeout_ms: u64,
13    /// 最大解码消息大小(字节)
14    pub max_decoding_message_size: usize,
15    /// 自动重连延迟(毫秒)
16    pub reconnect_delay_ms: u64,
17    /// 最大重连次数(0 表示无限重连)
18    pub max_reconnect_attempts: u32,
19}
20
21impl std::fmt::Debug for ShredStreamConfig {
22    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23        f.debug_struct("ShredStreamConfig")
24            .field("auth_token", &self.auth_token.as_ref().map(|_| "[REDACTED]"))
25            .field("connection_timeout_ms", &self.connection_timeout_ms)
26            .field("request_timeout_ms", &self.request_timeout_ms)
27            .field("max_decoding_message_size", &self.max_decoding_message_size)
28            .field("reconnect_delay_ms", &self.reconnect_delay_ms)
29            .field("max_reconnect_attempts", &self.max_reconnect_attempts)
30            .finish()
31    }
32}
33
34impl Default for ShredStreamConfig {
35    fn default() -> Self {
36        Self {
37            auth_token: None,
38            connection_timeout_ms: 8000,
39            request_timeout_ms: 15000,
40            max_decoding_message_size: 1024 * 1024 * 100, // 100MB
41            reconnect_delay_ms: 1000,
42            max_reconnect_attempts: 3,
43        }
44    }
45}
46
47impl ShredStreamConfig {
48    /// 低延迟配置 - 最小化处理延迟
49    pub fn low_latency() -> Self {
50        Self {
51            auth_token: None,
52            connection_timeout_ms: 5000,
53            request_timeout_ms: 10000,
54            max_decoding_message_size: 1024 * 1024 * 50,
55            reconnect_delay_ms: 100,
56            max_reconnect_attempts: 1,
57        }
58    }
59
60    /// 高吞吐配置 - 优化批量处理
61    pub fn high_throughput() -> Self {
62        Self {
63            auth_token: None,
64            connection_timeout_ms: 10000,
65            request_timeout_ms: 30000,
66            max_decoding_message_size: 1024 * 1024 * 200,
67            reconnect_delay_ms: 2000,
68            max_reconnect_attempts: 5,
69        }
70    }
71}