30#ifndef SER20_TYPES_STD_VARIANT_HPP_
31#define SER20_TYPES_STD_VARIANT_HPP_
33#include "ser20/ser20.hpp"
34#include <hpp/variant.hpp>
39 namespace variant_detail
42 template <
class Archive>
50 ar( make_nvp(
"data", value) );
57 template<
int N,
class Variant,
class Archive>
58 typename std::enable_if<N == hpp::variant_size_v<Variant>,
void>
::type
61 throw ::ser20::Exception(
"Error traversing variant during load");
64 template<
int N,
class Variant,
class Archive>
65 typename std::enable_if<N < hpp::variant_size_v<Variant>,
void>
::type
66 load_variant(Archive & ar,
int target, Variant & variant)
70 variant.template emplace<N>();
71 ar( make_nvp(
"data", hpp::get<N>(variant)) );
80 template <
class Archive,
typename VariantType1,
typename... VariantTypes>
inline
83 std::int32_t index =
static_cast<std::int32_t
>(variant.index());
84 ar( make_nvp(
"index", index) );
86 hpp::visit(visitor, variant);
90 template <
class Archive,
typename... VariantTypes>
inline
93 using variant_t =
typename hpp::variant<VariantTypes...>;
96 ar( make_nvp(
"index", index) );
97 if(index >=
static_cast<std::int32_t
>(hpp::variant_size_v<variant_t>))
98 throw Exception(
"Invalid 'index' selector when deserializing hpp::variant");
104 template <
class Archive>
std::enable_if< N==hpp::variant_size_v< Variant >, void >::type load_variant(Archive &, int, Variant &)
void SER20_SERIALIZE_FUNCTION_NAME(Archive &, hpp::monostate const &)
Serializing a std::monostate.
void SER20_LOAD_FUNCTION_NAME(YAMLInputArchive &ar, NameValuePair< T > &t)
void SER20_SAVE_FUNCTION_NAME(YAMLOutputArchive &ar, NameValuePair< T > const &t)
Serializing NVP types to YAML.
void operator()(T const &value) const
variant_save_visitor(Archive &ar_)