@@ -19,66 +19,6 @@ namespace content {
1919
2020} // namespace content
2121
22- template <typename N>
23- std::ostream& operator <<(std::ostream& os, std::span<N const > const & value) {
24- os << ' [' ;
25- bool atLeastOnePrinted{false };
26- for (auto const & v : value) {
27- if (atLeastOnePrinted) {
28- os << " , " ;
29- }
30- os << int (v);
31- atLeastOnePrinted = true ;
32- }
33- os << ' ]' ;
34- return os;
35- }
36-
37- struct Printer {
38- template <typename FieldT>
39- requires (requires { std::declval<FieldT>().value (); })
40- static void print (std::ostream& os, FieldT field, std::string_view parent) {
41- if (!parent.empty ()) {
42- os << parent << ' .' ;
43- }
44- os << field.sbeRefName () << " : " ;
45- if (field.present ()) {
46- os << field.value () << ' \n ' ;
47- } else {
48- os << " N/A\n " ;
49- }
50- }
51-
52- template <typename AggrT>
53- requires (requires { typename AggrT::Fields; })
54- static void print (std::ostream& os, AggrT aggr, std::string_view parent = {}) {
55- std::string prefix{parent};
56- if constexpr (requires { aggr.sbeRefName (); }) {
57- prefix.append (" ." ).append (aggr.sbeRefName ());
58- }
59-
60- auto printFields = [&]<template <typename ...> typename L, typename ... Ts>(L<Ts...>, std::string_view prefix) {
61- if constexpr (sizeof ...(Ts) > 0 ) {
62- [&]<std::size_t ... I>(std::index_sequence<I...>) {
63- (Printer::print (os, aggr.template get <I>(), prefix), ...);
64- }(std::make_index_sequence<sizeof ...(Ts)>{});
65- } else {
66- os << " No fields\n " ;
67- }
68- };
69-
70- if constexpr (requires { aggr.sbeGroupName (); }) {
71- std::size_t index = 0 ;
72- while (aggr.hasNext ()) {
73- aggr.next ();
74- printFields (typename AggrT::Fields{}, prefix + " [" + std::to_string (index++) + " ]" );
75- }
76- } else {
77- printFields (typename AggrT::Fields{}, prefix);
78- }
79- }
80- };
81-
8222int main ([[maybe_unused]] int argc, [[maybe_unused]] char * argv[]) {
8323 try {
8424 [[maybe_unused]] auto buffer1 = std::span<std::byte>(
@@ -87,21 +27,11 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] char* argv[]) {
8727 std::span<std::byte>(std::bit_cast<std::byte*>((unsigned char *)content::ticker), content::ticker_len);
8828
8929 auto header = spot_sbe::MessageHeader{buffer2.data ()};
90- std::print (" header: {}\n " , header);
9130 if (header.get <" templateId" >().value () == spot_sbe::Ticker24hFullResponse::sbeTemplateId ()) {
92- auto body = spot_sbe::Ticker24hFullResponse (buffer2, header.sbeEncodedLength (),
31+ [[maybe_unused]] auto body = spot_sbe::Ticker24hFullResponse (buffer2, header.sbeEncodedLength (),
9332 header.get <" blockLength" >().value (), header.get <" version" >().value ());
94- std::print (" body: {}\n " , body);
9533 }
9634
97- #if 0
98- spot_sbe::decode(buffer2, [](auto msg) {
99- Printer::print(std::cout, msg, msg.sbeMessageName());
100- });
101- spot_sbe::decode(buffer2, [](auto msg) {
102- std::cout << msg.asJson().dump(2) << '\n';
103- });
104- #endif
10535 } catch (std::exception const & e) {
10636 std::print (stderr, " ERROR: {}\n " , e.what ());
10737 return EXIT_FAILURE ;
0 commit comments