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 34 of file named_union.hpp.

Member Typedef Documentation

◆ VariantType

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

Definition at line 36 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 75 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 55 of file named_union.hpp.

◆ get() [1/2]

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

Definition at line 84 of file named_union.hpp.

◆ get() [2/2]

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

Definition at line 85 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 42 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 99 of file named_union.hpp.

◆ msgpack_pack()

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

Definition at line 107 of file named_union.hpp.

◆ msgpack_schema()

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

Definition at line 142 of file named_union.hpp.

◆ msgpack_unpack()

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

Definition at line 119 of file named_union.hpp.

◆ operator const VariantType &()

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

Definition at line 81 of file named_union.hpp.

◆ operator VariantType &()

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

Definition at line 80 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 88 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 93 of file named_union.hpp.

Member Data Documentation

◆ value_

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

Definition at line 39 of file named_union.hpp.


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