From e601250e7b1b2f465fc18fd27f4667452fe3a0f1 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Thu, 24 Mar 2022 17:18:23 +0100 Subject: [PATCH] kraken: parse: expose 'parse_single_order' --- src/parse/parse.cc | 22 +++++++++++++--------- src/parse/parse.hh | 5 +++++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/parse/parse.cc b/src/parse/parse.cc index e582a0a..76cb996 100644 --- a/src/parse/parse.cc +++ b/src/parse/parse.cc @@ -57,20 +57,24 @@ CancelOrder cancel_from_raw(csv::csv_line_type const& raw_order) { } // namespace +Order parse_single_order(csv::csv_line_type const& order) { + if (order[0] == "N") { + return trade_from_raw(order); + } else if (order[0] == "C") { + return cancel_from_raw(order); + } else if (order[0] == "F") { + return FlushOrder{}; + } else { + throw ParseError("Not a valid order"); + } +} + std::vector parse_orders(std::istream& input) { auto const raw_orders = read_csv(input, kraken::csv::CsvHeader::KEEP); auto orders = std::vector{}; for (auto const& raw_order : raw_orders) { - if (raw_order[0] == "N") { - orders.emplace_back(trade_from_raw(raw_order)); - } else if (raw_order[0] == "C") { - orders.emplace_back(cancel_from_raw(raw_order)); - } else if (raw_order[0] == "F") { - orders.emplace_back(FlushOrder{}); - } else { - throw ParseError("Not a valid order"); - } + orders.emplace_back(parse_single_order(raw_order)); } return orders; diff --git a/src/parse/parse.hh b/src/parse/parse.hh index fe91702..420335d 100644 --- a/src/parse/parse.hh +++ b/src/parse/parse.hh @@ -5,6 +5,7 @@ #include #include "book/order.hh" +#include "csv/csv.hh" namespace kraken::parse { @@ -12,6 +13,10 @@ struct ParseError : public std::runtime_error { using std::runtime_error::runtime_error; }; +/// Convert a single CSV input line to an `Order`. +Order parse_single_order(csv::csv_line_type const& order); + +/// Parse orders from an input stream as CSV. std::vector parse_orders(std::istream& input); } // namespace kraken::parse