#ifndef RFL_PARSING_PARSER_PAIR_HPP_ #define RFL_PARSING_PARSER_PAIR_HPP_ #include #include #include #include "../Ref.hpp" #include "../Result.hpp" #include "../always_false.hpp" #include "Parser_base.hpp" #include "schema/Type.hpp" namespace rfl { namespace parsing { template requires AreReaderAndWriter> struct Parser, ProcessorsType> { using InputVarType = typename R::InputVarType; using OutputVarType = typename W::OutputVarType; /// Expresses the variables as type T. static Result> read( const R& _r, const InputVarType& _var) noexcept { const auto to_pair = [&](auto&& _t) { return std::make_pair(std::move(std::get<0>(_t)), std::move(std::get<1>(_t))); }; return Parser, ProcessorsType>::read(_r, _var) .transform(to_pair); } template static void write(const W& _w, const std::pair& _p, const P& _parent) noexcept { const auto tup = std::make_tuple(&_p.first, &_p.second); Parser, ProcessorsType>::write(_w, tup, _parent); } static schema::Type to_schema( std::map* _definitions) { return Parser, ProcessorsType>::to_schema(_definitions); } }; } // namespace parsing } // namespace rfl #endif