#ifndef RFL_CBOR_READ_HPP_ #define RFL_CBOR_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 cbor { using InputObjectType = typename Reader::InputObjectType; using InputVarType = typename Reader::InputVarType; /// Parses an object from a CBOR var. template auto read(const InputVarType& _obj) { const auto r = Reader(); return Parser>::read(r, _obj); } /// Parses an object from CBOR using reflection. template Result> read(const char* _bytes, const size_t _size) { CborParser parser; CborValue value; cbor_parser_init(reinterpret_cast(_bytes), _size, 0, &parser, &value); auto doc = InputVarType { &value }; auto result = read(doc); return result; } /// Parses an object from CBOR using reflection. template auto read(const std::vector& _bytes) { return read(_bytes.data(), _bytes.size()); } /// Parses an object from a stream. template auto read(std::istream& _stream) { std::istreambuf_iterator begin(_stream), end; auto bytes = std::vector(begin, end); return read(bytes.data(), bytes.size()); } } // namespace cbor } // namespace rfl #endif