#pragma once #include namespace cbor { class ArrayDecoder { public: static auto Create(uint8_t *buffer, size_t buffer_len) -> cpp::result, CborError>; auto ParseString() -> cpp::result; auto ParseUnsigned() -> cpp::result; auto ParseSigned() -> cpp::result; auto Failed() -> CborError { return error_; } ArrayDecoder(const ArrayDecoder&) = delete; ArrayDecoder& operator=(const ArrayDecoder&) = delete; private: CborParser parser_; CborValue root_; CborValue it_; CborError error_ = CborNoError; }; class MapDecoder { public: static auto Create(uint8_t *buffer, size_t buffer_len) -> cpp::result, CborError>; auto FindString(const std::string &key) -> std::optional; auto FindUnsigned(const std::string &key) -> std::optional; auto FindSigned(const std::string &key) -> std::optional; auto Failed() -> CborError { return error_; } MapDecoder(const MapDecoder&) = delete; MapDecoder& operator=(const MapDecoder&) = delete; private: CborParser parser_; CborValue root_; CborValue it_; CborError error_ = CborNoError; }; } // namespace cbor