31 :
std::invalid_argument(what_arg)
34 :
std::invalid_argument(what_arg)
41 :
std::invalid_argument(what_arg)
44 :
std::invalid_argument(what_arg)
98 std::swap(
ptr_, temp.ptr_);
114 const T*
const get()
const {
return ptr_.get(); }
132 template <
typename Serializer>
static void serialize(
const T&
value, Serializer& serializer);
138 template <
typename Deserializer>
static T
deserialize(Deserializer& deserializer);
145 template <
typename Serializer>
static void serialize(
const std::string&
value, Serializer& serializer)
147 serializer.serialize_str(
value);
155 serializer.serialize_unit();
161 template <
typename Serializer>
static void serialize(
const bool&
value, Serializer& serializer)
163 serializer.serialize_bool(
value);
169 template <
typename Serializer>
static void serialize(
const char32_t&
value, Serializer& serializer)
171 serializer.serialize_char(
value);
177 template <
typename Serializer>
static void serialize(
const float&
value, Serializer& serializer)
179 serializer.serialize_f32(
value);
185 template <
typename Serializer>
static void serialize(
const double&
value, Serializer& serializer)
187 serializer.serialize_f64(
value);
193 template <
typename Serializer>
static void serialize(
const uint8_t&
value, Serializer& serializer)
195 serializer.serialize_u8(
value);
201 template <
typename Serializer>
static void serialize(
const uint16_t&
value, Serializer& serializer)
203 serializer.serialize_u16(
value);
209 template <
typename Serializer>
static void serialize(
const uint32_t&
value, Serializer& serializer)
211 serializer.serialize_u32(
value);
217 template <
typename Serializer>
static void serialize(
const uint64_t&
value, Serializer& serializer)
219 serializer.serialize_u64(
value);
227 serializer.serialize_u128(
value);
233 template <
typename Serializer>
static void serialize(
const int8_t&
value, Serializer& serializer)
235 serializer.serialize_i8(
value);
241 template <
typename Serializer>
static void serialize(
const int16_t&
value, Serializer& serializer)
243 serializer.serialize_i16(
value);
249 template <
typename Serializer>
static void serialize(
const int32_t&
value, Serializer& serializer)
251 serializer.serialize_i32(
value);
257 template <
typename Serializer>
static void serialize(
const int64_t&
value, Serializer& serializer)
259 serializer.serialize_i64(
value);
267 serializer.serialize_i128(
value);
285 if (option.has_value()) {
286 serializer.serialize_option_tag(
true);
289 serializer.serialize_option_tag(
false);
295template <
typename T,
typename Allocator>
struct Serializable<
std::vector<T, Allocator>> {
298 serializer.serialize_len(
value.size());
299 for (
const T& item :
value) {
309 for (
const T& item :
value) {
316template <
typename K,
typename V,
typename Allocator>
struct Serializable<
std::map<K, V, Allocator>> {
319 serializer.serialize_len(
value.size());
320 std::vector<size_t> offsets;
321 for (
const auto& item :
value) {
322 if constexpr (Serializer::enforce_strict_map_ordering) {
323 offsets.push_back(serializer.get_buffer_offset());
328 if constexpr (Serializer::enforce_strict_map_ordering) {
329 serializer.sort_last_entries(
std::move(offsets));
349 serializer.serialize_variant_index(
value.index());
352 [&serializer](
const auto& arg) {
353 using T =
typename std::decay<
decltype(arg)>::type;
372 template <
typename Deserializer>
static std::string
deserialize(Deserializer& deserializer)
374 return deserializer.deserialize_str();
382 return deserializer.deserialize_unit();
388 template <
typename Deserializer>
static bool deserialize(Deserializer& deserializer)
390 return deserializer.deserialize_bool();
396 template <
typename Deserializer>
static float deserialize(Deserializer& deserializer)
398 return deserializer.deserialize_f32();
404 template <
typename Deserializer>
static double deserialize(Deserializer& deserializer)
406 return deserializer.deserialize_f64();
412 template <
typename Deserializer>
static char32_t deserialize(Deserializer& deserializer)
414 return deserializer.deserialize_char();
420 template <
typename Deserializer>
static uint8_t
deserialize(Deserializer& deserializer)
422 return deserializer.deserialize_u8();
428 template <
typename Deserializer>
static uint16_t
deserialize(Deserializer& deserializer)
430 return deserializer.deserialize_u16();
436 template <
typename Deserializer>
static uint32_t
deserialize(Deserializer& deserializer)
438 return deserializer.deserialize_u32();
444 template <
typename Deserializer>
static uint64_t
deserialize(Deserializer& deserializer)
446 return deserializer.deserialize_u64();
454 return deserializer.deserialize_u128();
460 template <
typename Deserializer>
static int8_t
deserialize(Deserializer& deserializer)
462 return deserializer.deserialize_i8();
468 template <
typename Deserializer>
static int16_t
deserialize(Deserializer& deserializer)
470 return deserializer.deserialize_i16();
476 template <
typename Deserializer>
static int32_t
deserialize(Deserializer& deserializer)
478 return deserializer.deserialize_i32();
484 template <
typename Deserializer>
static int64_t
deserialize(Deserializer& deserializer)
486 return deserializer.deserialize_i64();
494 return deserializer.deserialize_i128();
512 auto tag = deserializer.deserialize_option_tag();
525 size_t len = deserializer.deserialize_len();
527 for (
size_t i = 0; i <
len; i++) {
539 size_t len = deserializer.deserialize_len();
541 for (
size_t i = 0; i <
len; i++) {
542 if constexpr (Deserializer::enforce_strict_map_ordering) {
543 auto start = deserializer.get_buffer_offset();
545 auto end = deserializer.get_buffer_offset();
546 if (previous_key_slice.has_value()) {
547 deserializer.check_that_key_slices_are_increasing(previous_key_slice.value(), { start, end });
549 previous_key_slice = { start, end };
567 for (T& item : result) {
576 template <
typename Deserializer>
static std::tuple<Types...>
deserialize(Deserializer& deserializer)
591 using Case = std::function<
std::variant<Types...>(Deserializer&)>;
592 auto make_case = [](
auto tag) -> Case {
595 using T =
typename decltype(tag)::type;
604 auto index = deserializer.deserialize_variant_index();
605 if (index > cases.size()) {
608 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)