29 template<
typename... Args>
30 struct pack<
std::variant<Args...>>
32 template<
typename Stream>
33 packer<Stream>& operator()(msgpack::packer<Stream>& o, std::variant<Args...>
const& v)
const
40 std::visit([&o](
auto&& arg) { o.pack(arg); }, v);
45 template<
typename... Args>
46 struct convert<
std::variant<Args...>>
51 template<
typename VariantType>
52 void set_variant_helper(std::size_t, msgpack::object
const&, VariantType&&)
const
74 template<
typename VariantType,
typename T,
typename... Types>
75 void set_variant_helper(std::size_t i, msgpack::object
const& o, VariantType&& v)
const
78 v = o.via.array.ptr[1].as<T>();
80 set_variant_helper<VariantType, Types...>(i - 1, o, v);
83 msgpack::object
const& operator()(msgpack::object
const& o, std::variant<Args...>& v)
const
85 if (o.type != msgpack::type::ARRAY)
86 throw msgpack::type_error();
90 if (o.via.array.size != 2)
91 throw msgpack::type_error();
92 std::size_t index = o.via.array.ptr[0].as<std::size_t>();
93 if (index >=
sizeof...(Args)) {
94 throw msgpack::type_error();
96 set_variant_helper<std::variant<Args...>&, Args...>(index, o, v);