#ifndef RFL_PARSING_PARSER_REFERENCE_WRAPPER_HPP_ #define RFL_PARSING_PARSER_REFERENCE_WRAPPER_HPP_ #include #include #include #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; static Result> read( const R& _r, const InputVarType& _var) noexcept { static_assert(always_false_v, "Reading into std::reference_wrapper is dangerous and " "therefore unsupported. " "Please consider using std::unique_ptr, rfl::Box, " "std::shared_ptr, or" "rfl::Ref instead."); return Error("Unsupported."); } template static void write(const W& _w, const std::reference_wrapper _ref, const P& _p) noexcept { Parser, ProcessorsType>::write(_w, _ref.get(), _p); } static schema::Type to_schema( std::map* _definitions) { return Parser, ProcessorsType>::to_schema( _definitions); } }; } // namespace parsing } // namespace rfl #endif