25 :
std::invalid_argument(what_arg)
28 :
std::invalid_argument(what_arg)
35 :
std::invalid_argument(what_arg)
38 :
std::invalid_argument(what_arg)
92 std::swap(
ptr_, temp.ptr_);
108 const T*
const get()
const {
return ptr_.get(); }
126 template <
typename Serializer>
static void serialize(
const T&
value, Serializer& serializer);
132 template <
typename Deserializer>
static T
deserialize(Deserializer& deserializer);
139 template <
typename Serializer>
static void serialize(
const std::string&
value, Serializer& serializer)
141 serializer.serialize_str(
value);
149 serializer.serialize_unit();
155 template <
typename Serializer>
static void serialize(
const bool&
value, Serializer& serializer)
157 serializer.serialize_bool(
value);
163 template <
typename Serializer>
static void serialize(
const char32_t&
value, Serializer& serializer)
165 serializer.serialize_char(
value);
171 template <
typename Serializer>
static void serialize(
const float&
value, Serializer& serializer)
173 serializer.serialize_f32(
value);
179 template <
typename Serializer>
static void serialize(
const double&
value, Serializer& serializer)
181 serializer.serialize_f64(
value);
187 template <
typename Serializer>
static void serialize(
const uint8_t&
value, Serializer& serializer)
189 serializer.serialize_u8(
value);
195 template <
typename Serializer>
static void serialize(
const uint16_t&
value, Serializer& serializer)
197 serializer.serialize_u16(
value);
203 template <
typename Serializer>
static void serialize(
const uint32_t&
value, Serializer& serializer)
205 serializer.serialize_u32(
value);
211 template <
typename Serializer>
static void serialize(
const uint64_t&
value, Serializer& serializer)
213 serializer.serialize_u64(
value);
221 serializer.serialize_u128(
value);
227 template <
typename Serializer>
static void serialize(
const int8_t&
value, Serializer& serializer)
229 serializer.serialize_i8(
value);
235 template <
typename Serializer>
static void serialize(
const int16_t&
value, Serializer& serializer)
237 serializer.serialize_i16(
value);
243 template <
typename Serializer>
static void serialize(
const int32_t&
value, Serializer& serializer)
245 serializer.serialize_i32(
value);
251 template <
typename Serializer>
static void serialize(
const int64_t&
value, Serializer& serializer)
253 serializer.serialize_i64(
value);
261 serializer.serialize_i128(
value);
279 if (option.has_value()) {
280 serializer.serialize_option_tag(
true);
283 serializer.serialize_option_tag(
false);
289template <
typename T,
typename Allocator>
struct Serializable<
std::vector<T, Allocator>> {
292 serializer.serialize_len(
value.size());
293 for (
const T& item :
value) {
303 for (
const T& item :
value) {
310template <
typename K,
typename V,
typename Allocator>
struct Serializable<
std::map<K, V, Allocator>> {
313 serializer.serialize_len(
value.size());
314 std::vector<size_t> offsets;
315 for (
const auto& item :
value) {
316 if constexpr (Serializer::enforce_strict_map_ordering) {
317 offsets.push_back(serializer.get_buffer_offset());
322 if constexpr (Serializer::enforce_strict_map_ordering) {
323 serializer.sort_last_entries(
std::move(offsets));
343 serializer.serialize_variant_index(
value.index());
346 [&serializer](
const auto& arg) {
366 template <
typename Deserializer>
static std::string
deserialize(Deserializer& deserializer)
368 return deserializer.deserialize_str();
376 return deserializer.deserialize_unit();
382 template <
typename Deserializer>
static bool deserialize(Deserializer& deserializer)
384 return deserializer.deserialize_bool();
390 template <
typename Deserializer>
static float deserialize(Deserializer& deserializer)
392 return deserializer.deserialize_f32();
398 template <
typename Deserializer>
static double deserialize(Deserializer& deserializer)
400 return deserializer.deserialize_f64();
406 template <
typename Deserializer>
static char32_t deserialize(Deserializer& deserializer)
408 return deserializer.deserialize_char();
414 template <
typename Deserializer>
static uint8_t
deserialize(Deserializer& deserializer)
416 return deserializer.deserialize_u8();
422 template <
typename Deserializer>
static uint16_t
deserialize(Deserializer& deserializer)
424 return deserializer.deserialize_u16();
430 template <
typename Deserializer>
static uint32_t
deserialize(Deserializer& deserializer)
432 return deserializer.deserialize_u32();
438 template <
typename Deserializer>
static uint64_t
deserialize(Deserializer& deserializer)
440 return deserializer.deserialize_u64();
448 return deserializer.deserialize_u128();
454 template <
typename Deserializer>
static int8_t
deserialize(Deserializer& deserializer)
456 return deserializer.deserialize_i8();
462 template <
typename Deserializer>
static int16_t
deserialize(Deserializer& deserializer)
464 return deserializer.deserialize_i16();
470 template <
typename Deserializer>
static int32_t
deserialize(Deserializer& deserializer)
472 return deserializer.deserialize_i32();
478 template <
typename Deserializer>
static int64_t
deserialize(Deserializer& deserializer)
480 return deserializer.deserialize_i64();
488 return deserializer.deserialize_i128();
506 auto tag = deserializer.deserialize_option_tag();
519 size_t len = deserializer.deserialize_len();
521 for (
size_t i = 0; i <
len; i++) {
533 size_t len = deserializer.deserialize_len();
535 for (
size_t i = 0; i <
len; i++) {
536 if constexpr (Deserializer::enforce_strict_map_ordering) {
537 auto start = deserializer.get_buffer_offset();
539 auto end = deserializer.get_buffer_offset();
540 if (previous_key_slice.has_value()) {
541 deserializer.check_that_key_slices_are_increasing(previous_key_slice.value(), { start, end });
543 previous_key_slice = { start, end };
561 for (T& item : result) {
570 template <
typename Deserializer>
static std::tuple<Types...>
deserialize(Deserializer& deserializer)
585 using Case = std::function<
std::variant<Types...>(Deserializer&)>;
586 auto make_case = [](
auto tag) -> Case {
598 auto index = deserializer.deserialize_variant_index();
599 if (
index > cases.size()) {
602 return cases.at(
index)(deserializer);
deserialization_error(const std::string &what_arg)
deserialization_error(const char *what_arg)
serialization_error(const char *what_arg)
serialization_error(const std::string &what_arg)
value_ptr & operator=(const value_ptr &other)
friend bool operator==(const value_ptr< U > &, const value_ptr< U > &)
const T *const operator->() const
value_ptr(value_ptr &&other)=default
value_ptr & operator=(value_ptr &&other)=default
std::unique_ptr< T > ptr_
const T & operator*() const
value_ptr(const value_ptr &other)
value_ptr(const T &value)
const T *const get() const
bool operator==(const uint128_t &lhs, const uint128_t &rhs)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static bool deserialize(Deserializer &deserializer)
static char32_t deserialize(Deserializer &deserializer)
static double deserialize(Deserializer &deserializer)
static float deserialize(Deserializer &deserializer)
static int128_t deserialize(Deserializer &deserializer)
static int16_t deserialize(Deserializer &deserializer)
static int32_t deserialize(Deserializer &deserializer)
static int64_t deserialize(Deserializer &deserializer)
static int8_t deserialize(Deserializer &deserializer)
static std::array< T, N > deserialize(Deserializer &deserializer)
static std::map< K, V > deserialize(Deserializer &deserializer)
static std::monostate deserialize(Deserializer &deserializer)
static std::optional< T > deserialize(Deserializer &deserializer)
static std::shared_ptr< Type > deserialize(Deserializer &serializer)
static std::string deserialize(Deserializer &deserializer)
static std::tuple< Types... > deserialize(Deserializer &deserializer)
static std::variant< Types... > deserialize(Deserializer &deserializer)
static std::vector< T > deserialize(Deserializer &deserializer)
static uint128_t deserialize(Deserializer &deserializer)
static uint16_t deserialize(Deserializer &deserializer)
static uint32_t deserialize(Deserializer &deserializer)
static uint64_t deserialize(Deserializer &deserializer)
static uint8_t deserialize(Deserializer &deserializer)
static value_ptr< T > deserialize(Deserializer &deserializer)
static T deserialize(Deserializer &deserializer)
static void serialize(const bool &value, Serializer &serializer)
static void serialize(const char32_t &value, Serializer &serializer)
static void serialize(const double &value, Serializer &serializer)
static void serialize(const float &value, Serializer &serializer)
static void serialize(const int128_t &value, Serializer &serializer)
static void serialize(const int16_t &value, Serializer &serializer)
static void serialize(const int32_t &value, Serializer &serializer)
static void serialize(const int64_t &value, Serializer &serializer)
static void serialize(const int8_t &value, Serializer &serializer)
static void serialize(const std::array< T, N > &value, Serializer &serializer)
static void serialize(const std::map< K, V, Allocator > &value, Serializer &serializer)
static void serialize(const std::monostate &, Serializer &serializer)
static void serialize(const std::optional< T > &option, Serializer &serializer)
static void serialize(const std::shared_ptr< Type > &value, Serializer &serializer)
static void serialize(const std::string &value, Serializer &serializer)
static void serialize(const std::tuple< Types... > &value, Serializer &serializer)
static void serialize(const std::variant< Types... > &value, Serializer &serializer)
static void serialize(const std::vector< T, Allocator > &value, Serializer &serializer)
static void serialize(const uint128_t &value, Serializer &serializer)
static void serialize(const uint16_t &value, Serializer &serializer)
static void serialize(const uint32_t &value, Serializer &serializer)
static void serialize(const uint64_t &value, Serializer &serializer)
static void serialize(const uint8_t &value, Serializer &serializer)
static void serialize(const value_ptr< T > &value, Serializer &serializer)
static void serialize(const T &value, Serializer &serializer)
friend bool operator==(const int128_t &, const int128_t &)
friend bool operator==(const uint128_t &, const uint128_t &)
void throw_or_abort(std::string const &err)