#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
|
|
>{};
|
|
}
|