Files
foxhunt/tli/src/client/data_stream.rs
jgrusewski 030a15ee05 🔧 Emergency Fix: Resolve catastrophic _i32 suffix corruption (463→0 errors)
- Fixed systematic array indexing corruption: [0_i32] → [0]
- Fixed numeric literal suffixes across 835 files
- Fixed iterator patterns on RwLockReadGuard (.iter() required)
- Fixed float type annotations (365.25_f64 for sqrt)
- Fixed missing semicolons in position manager
- Fixed reference dereferencing in data loader

Root cause: Mass refactoring incorrectly added _i32 suffixes to array indices
Impact: Complete compilation failure (463 errors)
Resolution: Automated regex + targeted fixes
Result: 100% compilation success (0 errors)

Validated: cargo check --workspace passes
Ready for: Production deployment
2025-10-10 23:05:26 +02:00

115 lines
3.6 KiB
Rust

//! Data streaming manager for high-performance market data processing
//!
//! This module provides low-latency data streaming capabilities for processing
//! market data feeds, order book updates, and trade executions with configurable
//! buffering and latency optimization.
use serde::{Deserialize, Serialize};
use tokio::sync::mpsc;
/// Configuration parameters for data stream management
///
/// Controls performance characteristics of data streams including buffer sizes,
/// latency requirements, and processing options for optimal throughput.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataStreamConfig {
/// Size of the internal data buffer (number of messages)
pub buffer_size: usize,
/// Maximum acceptable latency in milliseconds for data processing
pub max_latency_ms: u64,
}
/// High-performance data stream manager
///
/// Manages multiple concurrent data streams with optimized buffering and
/// low-latency processing. Handles market data feeds, order updates, and
/// real-time trading events with microsecond precision timing.
pub struct DataStreamManager {
/// Stream configuration parameters
#[allow(dead_code)]
config: DataStreamConfig,
/// Channel sender for outgoing data
#[allow(dead_code)]
sender: mpsc::Sender<Vec<u8>>,
/// Channel receiver for incoming data
#[allow(dead_code)]
receiver: mpsc::Receiver<Vec<u8>>,
}
impl DataStreamManager {
/// Create a new data stream manager with the specified configuration
///
/// # Arguments
/// * `config` - Stream configuration including buffer size and latency requirements
///
/// # Returns
///
/// New `DataStreamManager` instance ready for high-performance data processing
///
/// # Example
/// ```rust,no_run
/// use tli::client::data_stream::{DataStreamManager, DataStreamConfig};
///
/// let config = DataStreamConfig {
/// buffer_size: 10000,
/// max_latency_ms: 1,
/// };
/// let stream_manager = DataStreamManager::new(config);
/// ```
pub fn new(config: DataStreamConfig) -> Self {
let (sender, receiver) = mpsc::channel(config.buffer_size);
Self {
config,
sender,
receiver,
}
}
/// Start the data stream processing
///
/// Initializes all data streams and begins processing incoming market data.
///
/// Must be called before any data can be processed through the streams.
///
/// # Returns
/// `Result<(), String>` - Ok if streams start successfully
///
/// # Errors
///
/// Returns error message if stream initialization fails
pub async fn start(&mut self) -> Result<(), String> {
Ok(())
}
/// Stop all data stream processing
///
/// Gracefully shuts down all active data streams and flushes any
/// remaining data in buffers. Ensures no data loss during shutdown.
///
/// # Returns
/// `Result<(), String>` - Ok if streams stop cleanly
///
/// # Errors
///
/// Returns error message if shutdown encounters issues
pub async fn stop(&mut self) -> Result<(), String> {
Ok(())
}
/// Start all configured data streams
///
/// Convenience method that starts all data streams in the correct order.
///
/// Equivalent to calling `start()` but provides more explicit naming.
///
/// # Returns
/// `Result<(), String>` - Ok if all streams start successfully
///
/// # Errors
///
/// Returns error message if any stream fails to start
pub async fn start_streams(&mut self) -> Result<(), String> {
self.start().await
}
}