use std::str::FromStr; #[derive(Debug, Clone)] pub struct Ohlcv { pub time: String, pub open: f64, pub high: f64, pub low: f64, pub close: f64, pub tick_volume: u64, pub spread: u32, } #[derive(Debug, Clone)] pub struct Tick { pub time: String, pub bid: f64, pub ask: f64, pub volume: u64, } pub fn parse_ohlcv_csv(csv_data: &str) -> Vec { let mut results = Vec::new(); let mut lines = csv_data.lines(); // Skip header lines.next(); for line in lines { if line.trim().is_empty() { continue; } let parts: Vec<&str> = line.split(',').collect(); if parts.len() >= 7 { if let (Ok(o), Ok(h), Ok(l), Ok(c), Ok(tv), Ok(s)) = ( f64::from_str(parts[1]), f64::from_str(parts[2]), f64::from_str(parts[3]), f64::from_str(parts[4]), u64::from_str(parts[5]), u32::from_str(parts[6]), ) { results.push(Ohlcv { time: parts[0].to_string(), open: o, high: h, low: l, close: c, tick_volume: tv, spread: s, }); } } } results } pub fn parse_tick_csv(csv_data: &str) -> Vec { let mut results = Vec::new(); let mut lines = csv_data.lines(); // Skip header lines.next(); for line in lines { if line.trim().is_empty() { continue; } let parts: Vec<&str> = line.split(',').collect(); if parts.len() >= 4 { if let (Ok(b), Ok(a), Ok(v)) = ( f64::from_str(parts[1]), f64::from_str(parts[2]), u64::from_str(parts[3]), ) { results.push(Tick { time: parts[0].to_string(), bid: b, ask: a, volume: v, }); } } } results }