// Readers: CSV fixtures (always available) and Parquet/Arrow IPC (when RAID_WITH_ARROW). #pragma once #include #include #include #include "raid/data/bar_series.hpp" namespace raid::data { /// CSV fixture format (synthetic, committed): header /// symbol,timestamp_utc,open,high,low,close,volume (timestamp ISO-8601 UTC, bar open) std::map read_bars_csv(const std::string& path, Interval iv = Interval::m1); void write_bars_csv(const std::string& path, const BarSeries& bars); #ifdef RAID_WITH_ARROW /// Reads a FinData bars Parquet file (schema v1) into one BarSeries per instrument_id; `symbols` filters (empty = all). /// Returns also the dataset metadata found in the file footer (findata.schema_version, timestamp_convention). struct ParquetBars { std::map series; std::map metadata; usize rows_read{0}; usize duplicates_dropped{0}; }; ParquetBars read_bars_parquet(const std::string& path, const std::vector& symbols = {}, Interval iv = Interval::m1); /// Reads an Arrow IPC stream file (as returned by GET /market/bars?format=arrow). ParquetBars read_bars_arrow_ipc(const std::string& path, Interval iv = Interval::m1); #endif } // namespace raid::data