sol_parser_sdk/common/config.rs
1use super::constants::*;
2
3/// Backpressure handling strategy
4#[derive(Debug, Clone, Copy)]
5pub enum BackpressureStrategy {
6 /// Block and wait (default)
7 Block,
8 /// Drop messages
9 Drop,
10}
11
12impl Default for BackpressureStrategy {
13 fn default() -> Self {
14 Self::Block
15 }
16}
17
18/// Backpressure configuration
19#[derive(Debug, Clone)]
20pub struct BackpressureConfig {
21 /// Channel size (default: 1000)
22 pub permits: usize,
23 /// Backpressure handling strategy (default: Block)
24 pub strategy: BackpressureStrategy,
25}
26
27impl Default for BackpressureConfig {
28 fn default() -> Self {
29 Self { permits: 3000, strategy: BackpressureStrategy::default() }
30 }
31}
32
33/// Connection configuration
34#[derive(Debug, Clone)]
35pub struct ConnectionConfig {
36 /// Connection timeout in seconds (default: 10)
37 pub connect_timeout: u64,
38 /// Request timeout in seconds (default: 60)
39 pub request_timeout: u64,
40 /// Maximum decoding message size in bytes (default: 10MB)
41 pub max_decoding_message_size: usize,
42}
43
44impl Default for ConnectionConfig {
45 fn default() -> Self {
46 Self {
47 connect_timeout: DEFAULT_CONNECT_TIMEOUT,
48 request_timeout: DEFAULT_REQUEST_TIMEOUT,
49 max_decoding_message_size: DEFAULT_MAX_DECODING_MESSAGE_SIZE,
50 }
51 }
52}
53
54/// Common client configuration
55#[derive(Debug, Clone)]
56pub struct StreamClientConfig {
57 /// Connection configuration
58 pub connection: ConnectionConfig,
59 /// Backpressure configuration
60 pub backpressure: BackpressureConfig,
61 /// Whether performance monitoring is enabled (default: false)
62 pub enable_metrics: bool,
63}
64
65impl Default for StreamClientConfig {
66 fn default() -> Self {
67 Self {
68 connection: ConnectionConfig::default(),
69 backpressure: BackpressureConfig::default(),
70 enable_metrics: false,
71 }
72 }
73}
74
75impl StreamClientConfig {
76 /// Creates a high-throughput configuration optimized for high-concurrency scenarios.
77 ///
78 /// This configuration prioritizes throughput over latency by:
79 /// - Implementing a drop strategy for backpressure to avoid blocking
80 /// - Setting a large permit buffer (5,000) to handle burst traffic
81 ///
82 /// Ideal for scenarios where you need to process large volumes of data
83 /// and can tolerate occasional message drops during peak loads.
84 pub fn high_throughput() -> Self {
85 Self {
86 connection: ConnectionConfig::default(),
87 backpressure: BackpressureConfig {
88 permits: 20000,
89 strategy: BackpressureStrategy::Drop,
90 },
91 enable_metrics: false,
92 }
93 }
94
95 /// Creates a low-latency configuration optimized for real-time scenarios.
96 ///
97 /// This configuration prioritizes latency over throughput by:
98 /// - Processing events immediately without buffering
99 /// - Implementing a blocking backpressure strategy to ensure no data loss
100 /// - Setting optimal permits (4000) for balanced throughput and latency
101 ///
102 /// Ideal for scenarios where every millisecond counts and you cannot
103 /// afford to lose any events, such as trading applications or real-time monitoring.
104 pub fn low_latency() -> Self {
105 Self {
106 connection: ConnectionConfig::default(),
107 backpressure: BackpressureConfig { permits: 4000, strategy: BackpressureStrategy::Block },
108 enable_metrics: false,
109 }
110 }
111
112}