Add support for CBOR tags

This commit is contained in:
TennesseeTrash 2025-09-19 18:51:23 +02:00
parent acf4d93fde
commit b65c700c29
5 changed files with 120 additions and 17 deletions

View file

@ -21,6 +21,8 @@ struct SomeStruct
std::size_t Encode(const SomeStruct &value, std::span<std::uint8_t> buffer)
{
CBOR::BasicEncoder enc(buffer);
enc.EncodeTag(15'000);
enc.BeginMap(7);
enc.Encode("name");
@ -56,7 +58,11 @@ SomeStruct Decode1(std::span<std::uint8_t> buffer)
SomeStruct result;
CBOR::Decoder dec(buffer);
CBOR::Map object = dec.Map();
CBOR::TaggedItem tagged = dec.TaggedItem();
if (tagged.Tag() != 15'000) {
throw std::runtime_error("test error: could not extract object tag");
}
CBOR::Map object = tagged.Item().Map();
while (!object.Done()) {
CBOR::KeyValue kv = object.Next();
std::string_view key = kv.Key().String();
@ -95,7 +101,11 @@ SomeStruct Decode2(std::span<std::uint8_t> buffer)
SomeStruct result;
CBOR::Decoder dec(buffer);
CBOR::Map object = dec.Map();
CBOR::TaggedItem tagged = dec.TaggedItem();
if (tagged.Tag() != 15'000) {
throw std::runtime_error("test error: could not extract object tag");
}
CBOR::Map object = tagged.Item().Map();
while (!object.Done()) {
CBOR::KeyValue kv = object.Next();
std::string_view key = kv.Key().String();
@ -164,7 +174,7 @@ int main()
{
using namespace std::string_view_literals;
std::array<std::uint8_t, 1024> buffer = {0};
std::array<std::uint8_t, 1024> buffer {};
SomeStruct expected {
.name = "Player1",