15#include "msgpack/object_fwd.hpp"
44 if constexpr (
I <
sizeof...(Types)) {
46 if (name == CurrentType::MSGPACK_SCHEMA_NAME) {
57 if constexpr (
I <
sizeof...(Types)) {
102 [](
const auto&
obj) -> std::string_view {
return std::decay_t<
decltype(
obj)>::MSGPACK_SCHEMA_NAME; },
109 packer.pack_array(2);
115 std::visit([&packer](
const auto&
obj) { packer.pack(
obj); },
value_);
123 if (o.type != msgpack::type::ARRAY || o.via.array.size != 2) {
124 throw_or_abort(
"Expected an array of size 2 for NamedUnion deserialization, got " +
127 const auto&
arr = o.via.array;
128 if (
arr.ptr[0].type != msgpack::type::STR) {
129 throw_or_abort(
"Expected first element to be a string (type name) in NamedUnion deserialization");
131 std::string_view
type_name = std::string_view(
arr.ptr[0].via.str.ptr,
arr.ptr[0].via.str.size);
144 packer.pack_array(2);
145 packer.pack(
"named_union");
146 packer.pack_array(
sizeof...(
Types));
149 packer.pack_array(2);
150 packer.pack(Types::MSGPACK_SCHEMA_NAME);
A wrapper around std::variant that provides msgpack serialization based on type names.
decltype(auto) visit(Visitor &&vis) &&
void msgpack_schema(auto &packer) const
void msgpack_unpack(msgpack::object const &o)
void msgpack_pack(auto &packer) const
const VariantType & get() const
static VariantType construct_by_index(size_t index, auto &o)
static std::optional< size_t > get_index_from_name(std::string_view name)
std::variant< Types... > VariantType
std::string_view get_type_name() const
decltype(auto) visit(Visitor &&vis) const &
Concept to check if a type has a static NAME member.
Entry point for Barretenberg command-line interface.
std::string msgpack_to_json(msgpack::object const &o, size_t max_chars)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
void throw_or_abort(std::string const &err)