102 static_cast<S*
>(
this)->serialize_len(
value.size());
103 for (
auto c :
value) {
127 bytes_.push_back((uint8_t)
value);
132 bytes_.push_back(
value);
137 bytes_.push_back((uint8_t)
value);
138 bytes_.push_back((uint8_t)(
value >> 8));
143 bytes_.push_back((uint8_t)
value);
144 bytes_.push_back((uint8_t)(
value >> 8));
145 bytes_.push_back((uint8_t)(
value >> 16));
146 bytes_.push_back((uint8_t)(
value >> 24));
151 bytes_.push_back((uint8_t)
value);
152 bytes_.push_back((uint8_t)(
value >> 8));
153 bytes_.push_back((uint8_t)(
value >> 16));
154 bytes_.push_back((uint8_t)(
value >> 24));
155 bytes_.push_back((uint8_t)(
value >> 32));
156 bytes_.push_back((uint8_t)(
value >> 40));
157 bytes_.push_back((uint8_t)(
value >> 48));
158 bytes_.push_back((uint8_t)(
value >> 56));
163 serialize_u64(
value.low);
164 serialize_u64(
value.high);
169 serialize_u8((uint8_t)
value);
174 serialize_u16((uint16_t)
value);
179 serialize_u32((uint32_t)
value);
184 serialize_u64((uint64_t)
value);
189 serialize_u64(
value.low);
190 serialize_i64(
value.high);
195 serialize_bool(
value);
200 return bytes_.size();
205 if (container_depth_budget_ == 0) {
208 container_depth_budget_--;
213 container_depth_budget_++;
218 if (pos_ >= bytes_.size()) {
221 return bytes_.at(pos_++);
226 uint8_t trailing_digits = 0;
227 for (
char byte : input) {
228 if (trailing_digits == 0) {
230 if (
byte >> 7 == 0) {
232 }
else if (
byte >> 5 == 0b110) {
235 }
else if (
byte >> 4 == 0b1110) {
238 }
else if (
byte >> 3 == 0b11110) {
246 if (
byte >> 6 != 0b10) {
249 trailing_digits -= 1;
252 return trailing_digits == 0;
257 auto len =
static_cast<D*
>(
this)->deserialize_len();
260 for (
size_t i = 0; i <
len; i++) {
261 result.push_back(read_byte());
291 switch (read_byte()) {
309 val |= (uint16_t)read_byte();
310 val |= (uint16_t)read_byte() << 8;
317 val |= (uint32_t)read_byte();
318 val |= (uint32_t)read_byte() << 8;
319 val |= (uint32_t)read_byte() << 16;
320 val |= (uint32_t)read_byte() << 24;
327 val |= (uint64_t)read_byte();
328 val |= (uint64_t)read_byte() << 8;
329 val |= (uint64_t)read_byte() << 16;
330 val |= (uint64_t)read_byte() << 24;
331 val |= (uint64_t)read_byte() << 32;
332 val |= (uint64_t)read_byte() << 40;
333 val |= (uint64_t)read_byte() << 48;
334 val |= (uint64_t)read_byte() << 56;
341 result.
low = deserialize_u64();
342 result.
high = deserialize_u64();
348 return (int8_t)deserialize_u8();
353 return (int16_t)deserialize_u16();
358 return (int32_t)deserialize_u32();
363 return (int64_t)deserialize_u64();
369 result.
low = deserialize_u64();
370 result.
high = deserialize_i64();
376 return deserialize_bool();
386 if (container_depth_budget_ == 0) {
389 container_depth_budget_--;
394 container_depth_budget_++;
uint64_t deserialize_u64()
void decrease_container_depth()
uint128_t deserialize_u128()
void increase_container_depth()
std::vector< uint8_t > bytes_
size_t container_depth_budget_
int64_t deserialize_i64()
std::string deserialize_str()
bool deserialize_option_tag()
std::monostate deserialize_unit()
int32_t deserialize_i32()
size_t get_buffer_offset()
uint32_t deserialize_u32()
int16_t deserialize_i16()
int128_t deserialize_i128()
BinaryDeserializer(std::vector< uint8_t > bytes, size_t max_container_depth)
char32_t deserialize_char()
uint16_t deserialize_u16()
void serialize_char(char32_t value)
void serialize_str(const std::string &value)
void serialize_i128(const int128_t &value)
void serialize_option_tag(bool value)
void serialize_i16(int16_t value)
void serialize_u64(uint64_t value)
BinarySerializer(size_t max_container_depth)
std::vector< uint8_t > bytes() &&
void serialize_i32(int32_t value)
void serialize_i8(int8_t value)
size_t get_buffer_offset()
std::vector< uint8_t > bytes_
void serialize_u16(uint16_t value)
void serialize_u32(uint32_t value)
void serialize_f32(float value)
void serialize_u8(uint8_t value)
size_t container_depth_budget_
void decrease_container_depth()
void serialize_f64(double value)
void serialize_bool(bool value)
void serialize_u128(const uint128_t &value)
void serialize_i64(int64_t value)
void increase_container_depth()
bool is_valid_utf8(const std::string &input)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
void throw_or_abort(std::string const &err)