| 262 | } |
| 263 | |
| 264 | fn validate_lengths(columns: &OhlcvColumns) -> Result<(), String> { |
| 265 | let n = columns.timestamps_us.len(); |
| 266 | let lengths = [ |
| 267 | columns.symbols.len(), |
| 268 | columns.open.len(), |
| 269 | columns.high.len(), |
| 270 | columns.low.len(), |
| 271 | columns.close.len(), |
| 272 | columns.volume.len(), |
| 273 | columns.adj_close.len(), |
| 274 | ]; |
| 275 | if lengths.iter().any(|&len| len != n) { |
| 276 | return Err(format!( |
| 277 | "ohlcv vector length mismatch: ts={n}, symbol={}, open={}, high={}, low={}, close={}, volume={}, adj_close={}", |
| 278 | columns.symbols.len(), |
| 279 | columns.open.len(), |
| 280 | columns.high.len(), |
| 281 | columns.low.len(), |
| 282 | columns.close.len(), |
| 283 | columns.volume.len(), |
| 284 | columns.adj_close.len() |
| 285 | )); |
| 286 | } |
| 287 | Ok(()) |
| 288 | } |
| 289 | |
| 290 | fn to_polars_df(columns: &OhlcvColumns) -> Result<DataFrame, String> { |
| 291 | validate_lengths(columns)?; |