Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::NamedUnion< Types > Class Template Reference

A wrapper around std::variant that provides msgpack serialization based on type names. More...

#include <named_union.hpp>

Public Types

using VariantType = std::variant< Types... >
 

Public Member Functions

 NamedUnion ()=default
 
template<typename T >
requires (std::is_constructible_v<VariantType, T>)
 NamedUnion (T &&t)
 
 operator VariantType & ()
 
 operator const VariantType & () const
 
VariantTypeget ()
 
const VariantTypeget () const
 
template<typename Visitor >
decltype(autovisit (Visitor &&vis) &&
 
template<typename Visitor >
decltype(autovisit (Visitor &&vis) const &
 
std::string_view get_type_name () const
 
void msgpack_pack (auto &packer) const
 
void msgpack_unpack (msgpack::object const &o)
 
void msgpack_schema (auto &packer) const
 

Static Private Member Functions

template<size_t I = 0>
static std::optional< size_tget_index_from_name (std::string_view name)
 
template<size_t I = 0>
static VariantType construct_by_index (size_t index, auto &o)
 

Private Attributes

VariantType value_
 

Detailed Description

template<HasMsgpackSchemaName... Types>
class bb::NamedUnion< Types >

A wrapper around std::variant that provides msgpack serialization based on type names.

Each type in the variant must have a static constexpr NAME member that identifies it. During serialization, the NAME is written first, then the object. During deserialization, the NAME is read first to determine which type to construct.

Definition at line 33 of file named_union.hpp.

Member Typedef Documentation

◆ VariantType

template<HasMsgpackSchemaName... Types>
using bb::NamedUnion< Types >::VariantType = std::variant<Types...>

Definition at line 35 of file named_union.hpp.

Constructor & Destructor Documentation

◆ NamedUnion() [1/2]

template<HasMsgpackSchemaName... Types>
bb::NamedUnion< Types >::NamedUnion ( )
default

◆ NamedUnion() [2/2]

template<HasMsgpackSchemaName... Types>
template<typename T >
requires (std::is_constructible_v<VariantType, T>)
bb::NamedUnion< Types >::NamedUnion ( T &&  t)
inline

Definition at line 74 of file named_union.hpp.

Member Function Documentation

◆ construct_by_index()

template<HasMsgpackSchemaName... Types>
template<size_t I = 0>
static VariantType bb::NamedUnion< Types >::construct_by_index ( size_t  index,
auto o 
)
inlinestaticprivate

Definition at line 54 of file named_union.hpp.

◆ get() [1/2]

template<HasMsgpackSchemaName... Types>
VariantType & bb::NamedUnion< Types >::get ( )
inline

Definition at line 83 of file named_union.hpp.

◆ get() [2/2]

template<HasMsgpackSchemaName... Types>
const VariantType & bb::NamedUnion< Types >::get ( ) const
inline

Definition at line 84 of file named_union.hpp.

◆ get_index_from_name()

template<HasMsgpackSchemaName... Types>
template<size_t I = 0>
static std::optional< size_t > bb::NamedUnion< Types >::get_index_from_name ( std::string_view  name)
inlinestaticprivate

Definition at line 41 of file named_union.hpp.

◆ get_type_name()

template<HasMsgpackSchemaName... Types>
std::string_view bb::NamedUnion< Types >::get_type_name ( ) const
inline

Definition at line 98 of file named_union.hpp.

◆ msgpack_pack()

template<HasMsgpackSchemaName... Types>
void bb::NamedUnion< Types >::msgpack_pack ( auto packer) const
inline

Definition at line 106 of file named_union.hpp.

◆ msgpack_schema()

template<HasMsgpackSchemaName... Types>
void bb::NamedUnion< Types >::msgpack_schema ( auto packer) const
inline

Definition at line 141 of file named_union.hpp.

◆ msgpack_unpack()

template<HasMsgpackSchemaName... Types>
void bb::NamedUnion< Types >::msgpack_unpack ( msgpack::object const o)
inline

Definition at line 118 of file named_union.hpp.

◆ operator const VariantType &()

template<HasMsgpackSchemaName... Types>
bb::NamedUnion< Types >::operator const VariantType & ( ) const
inline

Definition at line 80 of file named_union.hpp.

◆ operator VariantType &()

template<HasMsgpackSchemaName... Types>
bb::NamedUnion< Types >::operator VariantType & ( )
inline

Definition at line 79 of file named_union.hpp.

◆ visit() [1/2]

template<HasMsgpackSchemaName... Types>
template<typename Visitor >
decltype(auto) bb::NamedUnion< Types >::visit ( Visitor &&  vis) &&
inline

Definition at line 87 of file named_union.hpp.

◆ visit() [2/2]

template<HasMsgpackSchemaName... Types>
template<typename Visitor >
decltype(auto) bb::NamedUnion< Types >::visit ( Visitor &&  vis) const &
inline

Definition at line 92 of file named_union.hpp.

Member Data Documentation

◆ value_

template<HasMsgpackSchemaName... Types>
VariantType bb::NamedUnion< Types >::value_
private

Definition at line 38 of file named_union.hpp.


The documentation for this class was generated from the following file: