#ifndef RFL_JSON_READ_HPP_ #define RFL_JSON_READ_HPP_ #include #include #include #include "../Processors.hpp" #include "../internal/wrap_in_rfl_array_t.hpp" #include "Parser.hpp" #include "Reader.hpp" namespace rfl { namespace json { using InputObjectType = typename Reader::InputObjectType; using InputVarType = typename Reader::InputVarType; /// Parses an object from a JSON var. template auto read(const InputVarType& _obj) { const auto r = Reader(); return Parser>::read(r, _obj); } /// Parses an object from JSON using reflection. template Result> read(const std::string& _json_str ) { yyjson_doc* doc = yyjson_read(_json_str.c_str(), _json_str.size(), 0); if (!doc) { return Error("Could not parse document"); } yyjson_val* root = yyjson_doc_get_root(doc); const auto r = Reader(); auto res = Parser>::read(r, InputVarType(root)); yyjson_doc_free(doc); return res; } /// Parses an object from a stringstream. template auto read(std::istream& _stream) { const auto json_str = std::string( std::istreambuf_iterator(_stream), std::istreambuf_iterator() ); return read(json_str); } } // namespace json } // namespace rfl #endif