|
|
@ -0,0 +1,86 @@ |
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <gp/variant.hpp>
|
|
|
|
#include <gp/optional.hpp>
|
|
|
|
#include <gp/vector.hpp>
|
|
|
|
#include <gp/pair.hpp>
|
|
|
|
|
|
|
|
|
|
|
|
namespace gp { |
|
|
|
enum class cbor_type { |
|
|
|
uint = 0, |
|
|
|
nint = 1, |
|
|
|
bstr = 2, |
|
|
|
tstr = 3, |
|
|
|
list = 4, |
|
|
|
hmap = 5, |
|
|
|
tags = 6, |
|
|
|
oths = 7 |
|
|
|
}; |
|
|
|
|
|
|
|
enum class cbor_oths { |
|
|
|
value_false = 20, |
|
|
|
value_true = 21, |
|
|
|
value_null = 22, |
|
|
|
value_undefined = 23, |
|
|
|
byte = 24, |
|
|
|
word = 25, |
|
|
|
dword = 26, |
|
|
|
qword = 27, |
|
|
|
terminator = 31 |
|
|
|
}; |
|
|
|
|
|
|
|
enum class cbor_tags { |
|
|
|
datetime = 0, |
|
|
|
unix_time = 1, |
|
|
|
ubignum = 2, |
|
|
|
nbignum = 3, |
|
|
|
decimal = 4, |
|
|
|
bigfloat = 5, |
|
|
|
cose_encrypt0 = 16, |
|
|
|
cose_mac0 = 17, |
|
|
|
cose_sign1 = 18, |
|
|
|
expected_base64url = 21, |
|
|
|
expected_base64 = 22, |
|
|
|
expected_base16 = 23, |
|
|
|
encoded_cbor = 24, |
|
|
|
url = 32, |
|
|
|
base64url = 33, |
|
|
|
base64 = 34, |
|
|
|
regexp = 35, |
|
|
|
mime = 36, |
|
|
|
cose_encrypt = 96, |
|
|
|
cose_mac = 97, |
|
|
|
cose_sign = 98, |
|
|
|
signature = 55799 |
|
|
|
}; |
|
|
|
|
|
|
|
using cbor_number = gp::fixed_variant< |
|
|
|
int8_t, |
|
|
|
uint8_t, |
|
|
|
int16_t, |
|
|
|
uint16_t, |
|
|
|
int32_t, |
|
|
|
uint32_t, |
|
|
|
int64_t, |
|
|
|
uint64_t |
|
|
|
>; |
|
|
|
|
|
|
|
using cbor_floating_point = gp::fixed_variant< |
|
|
|
float, |
|
|
|
double |
|
|
|
>; |
|
|
|
|
|
|
|
struct undefined_t{}; |
|
|
|
|
|
|
|
class cbor_value : public gp::fixed_variant< |
|
|
|
cbor_number, |
|
|
|
gp::buffer<std::byte>, |
|
|
|
bool, |
|
|
|
gp::vector<cbor_value>, |
|
|
|
gp::vector<gp::pair<cbor_value, cbor_value>>, |
|
|
|
gp::nullopt_t, |
|
|
|
undefined_t, |
|
|
|
cbor_floating_point |
|
|
|
>{}; |
|
|
|
} |