60 template <
typename ValueType>
61 explicit Variant(
const ValueType& value) : Variant()
63 msg_.openVariant<ValueType>();
71 msg_.openVariant<Variant>();
77 template <
typename Struct>
80 msg_.openVariant<std::map<std::string, Variant>>();
86 template <
typename... Elements>
87 Variant(
const std::variant<Elements...>& value)
94 template <
typename ValueType>
99 msg_.enterVariant<ValueType>();
106 [[nodiscard]] std::string dumpToString()
const
110 return msg_.dumpToString(Message::DumpFlags::SubtreeOnly);
115 template <typename ValueType, typename = std::enable_if_t<signature_of<ValueType>::is_valid>>
116 explicit operator ValueType()
const
118 return get<ValueType>();
121 template <
typename... Elements>
122 operator std::variant<Elements...>()
const
124 std::variant<Elements...> result;
130 template <
typename Type>
131 bool containsValueOfType()
const
133 constexpr auto signature = as_null_terminated(signature_of_v<Type>);
134 return std::strcmp(signature.data(), peekValueType()) == 0;
137 bool isEmpty()
const;
139 void serializeTo(
Message& msg)
const;
140 void deserializeFrom(
Message& msg);
141 const char* peekValueType()
const;