#ifndef RFL_PARSING_TABULAR_MAKEARROWBUILDERS_HPP_ #define RFL_PARSING_TABULAR_MAKEARROWBUILDERS_HPP_ #include #include #include "../../named_tuple_t.hpp" #include "ArrowTypes.hpp" namespace rfl::parsing::tabular { template using arrow_builder_t = typename ArrowTypes>, _s>::BuilderType; template struct ArrowBuildersType; template struct ArrowBuildersType, _s> { using Type = Tuple...>; static auto data_types() { return [&](std::integer_sequence) { return std::array, sizeof...(FieldTypes)>( {ArrowTypes::data_type()...}); }(std::make_integer_sequence()); } static Type make_builders() { return Type(ArrowTypes::make_builder()...); } static auto schema() { const auto fields = std::vector>({arrow::field( typename FieldTypes::Name().str(), ArrowTypes::data_type())...}); return arrow::schema(fields); } }; template auto make_arrow_builders() { return ArrowBuildersType, _s>::make_builders(); } } // namespace rfl::parsing::tabular #endif