25 #ifndef CARGO_GVARIANT_TO_GVARIANT_VISITOR_HPP
26 #define CARGO_GVARIANT_TO_GVARIANT_VISITOR_HPP
47 :
mBuilder(g_variant_builder_new(G_VARIANT_TYPE_TUPLE))
68 GVariant* ret = g_variant_builder_end(
mBuilder);
77 void visit(
const std::string& ,
const T& value)
115 add(
"s", value.c_str());
127 if (!value.empty()) {
128 g_variant_builder_open(
mBuilder, G_VARIANT_TYPE_ARRAY);
129 for (
const T& v : value) {
134 g_variant_builder_add(
mBuilder,
"as", NULL);
138 template<
typename T, std::
size_t N>
141 if (!values.empty()) {
142 g_variant_builder_open(
mBuilder, G_VARIANT_TYPE_ARRAY);
143 for (
const T& v : values) {
148 g_variant_builder_add(
mBuilder,
"as", NULL);
155 if (!values.empty()) {
156 g_variant_builder_open(
mBuilder, G_VARIANT_TYPE_TUPLE);
157 for (
const auto& v : values) {
162 g_variant_builder_add(
mBuilder,
"as", NULL);
166 template<typename T, typename std::enable_if<isLikeTuple<T>::value,
int>::type = 0>
169 g_variant_builder_open(
mBuilder, G_VARIANT_TYPE_TUPLE);
174 template<typename T, typename std::enable_if<std::is_enum<T>::value,
int>::type = 0>
177 writeInternal(
static_cast<const typename std::underlying_type<T>::type
>(value));
185 value.accept(visitor);
194 value.accept(visitor);
198 template<
typename Value>
199 void add(
const char* type, Value value) {
200 g_variant_builder_add(
mBuilder, type, value);
206 #endif // CARGO_GVARIANT_TO_GVARIANT_VISITOR_HPP
Definition: is-union.hpp:60
void writeInternal(const T &value)
Definition: to-gvariant-visitor.hpp:175
Internal configuration helper.
void writeInternal(const std::array< T, N > &values)
Definition: to-gvariant-visitor.hpp:139
void writeInternal(std::uint16_t value)
Definition: to-gvariant-visitor.hpp:99
void writeInternal(double value)
Definition: to-gvariant-visitor.hpp:111
void writeInternal(std::uint64_t value)
Definition: to-gvariant-visitor.hpp:105
~ToGVariantVisitor()
Definition: to-gvariant-visitor.hpp:56
ToGVariantVisitor(const ToGVariantVisitor &visitor)
Definition: to-gvariant-visitor.hpp:51
void writeInternal(std::uint8_t value)
Definition: to-gvariant-visitor.hpp:96
Whenever possible, this type will be serialized using Linux file descriptor passing.
Definition: types.hpp:33
Helper function for iterating tuples, pairs and arrays.
GVariantBuilder * mBuilder
Definition: to-gvariant-visitor.hpp:82
void writeInternal(const T &values)
Definition: to-gvariant-visitor.hpp:167
void writeInternal(const std::vector< T > &value)
Definition: to-gvariant-visitor.hpp:125
Definition: to-gvariant-visitor.hpp:43
void writeInternal(std::int64_t value)
Definition: to-gvariant-visitor.hpp:93
void writeInternal(std::int32_t value)
Definition: to-gvariant-visitor.hpp:90
Internal configuration helper.
void writeInternal(std::uint32_t value)
Definition: to-gvariant-visitor.hpp:102
void writeInternal(const std::map< std::string, V > &values)
Definition: to-gvariant-visitor.hpp:153
void writeInternal(std::int16_t value)
Definition: to-gvariant-visitor.hpp:87
ToGVariantVisitor & operator=(const ToGVariantVisitor &)=delete
void visit(const std::string &, const T &value)
Definition: to-gvariant-visitor.hpp:77
void writeInternal(bool value)
Definition: to-gvariant-visitor.hpp:108
int value
Definition: types.hpp:34
std::enable_if< isVisitable< T >::value &&!isUnion< T >::value >::type writeInternal(const T &value)
Definition: to-gvariant-visitor.hpp:182
std::enable_if< isVisitable< T >::value &&isUnion< T >::value >::type writeInternal(const T &value)
Definition: to-gvariant-visitor.hpp:191
ToGVariantVisitor()
Definition: to-gvariant-visitor.hpp:46
void writeInternal(const char *value)
Definition: to-gvariant-visitor.hpp:117
void writeInternal(const std::string &value)
Definition: to-gvariant-visitor.hpp:114
void writeInternal(std::int8_t value)
Definition: to-gvariant-visitor.hpp:84
void add(const char *type, Value value)
Definition: to-gvariant-visitor.hpp:199
void writeInternal(const cargo::FileDescriptor &value)
Definition: to-gvariant-visitor.hpp:120
GVariant * toVariant()
Definition: to-gvariant-visitor.hpp:65
void visitFields(T &t, F f, A...args)
Definition: visit-fields.hpp:58