CppWAMP
C++11 client library for the WAMP protocol
|
7 #ifndef CPPWAMP_INTERNAL_VARIANTENCODING_HPP
8 #define CPPWAMP_INTERNAL_VARIANTENCODING_HPP
10 #include <jsoncons/byte_string.hpp>
11 #include <jsoncons/sink.hpp>
12 #include "../codec.hpp"
13 #include "../variant.hpp"
22 template <
typename TEncoder>
23 class VariantEncodingVisitor :
public Visitor<>
26 explicit VariantEncodingVisitor(TEncoder& encoder)
32 encoder_.null_value();
35 void operator()(
Bool b)
37 encoder_.bool_value(b);
40 void operator()(
Int n)
42 encoder_.int64_value(n);
45 void operator()(
UInt n)
47 encoder_.uint64_value(n);
50 void operator()(
Real x)
52 encoder_.double_value(x);
55 void operator()(
const String& s)
57 encoder_.string_value({s.data(), s.size()});
60 void operator()(
const Blob& b)
62 jsoncons::byte_string_view bsv(b.data().data(), b.data().size());
63 encoder_.byte_string_value(bsv);
66 void operator()(
const Array& a)
68 encoder_.begin_array(a.size());
69 for (
const auto& v: a)
70 wamp::apply(*
this, v);
74 void operator()(
const Object& o)
76 encoder_.begin_object(o.size());
77 for (
const auto& kv: o)
79 const auto& key = kv.first;
80 encoder_.key({key.data(), key.size()});
81 wamp::apply(*
this, kv.second);
83 encoder_.end_object();
94 #endif // CPPWAMP_INTERNAL_VARIANTENCODING_HPP
std::uint64_t UInt
Variant bound type for unsigned integers.
Definition: variantdefs.hpp:48
std::map< String, Variant > Object
Variant bound type for maps of variants.
Definition: variantdefs.hpp:52
Definition: anyhandler.hpp:36
std::vector< Variant > Array
Variant bound type for arrays of variants.
Definition: variantdefs.hpp:51
std::int64_t Int
Variant bound type for signed integers.
Definition: variantdefs.hpp:47
bool Bool
Variant bound type for boolean values.
Definition: variantdefs.hpp:46
double Real
Variant bound type for floating-point numbers.
Definition: variantdefs.hpp:49
std::string String
Variant bound type for text strings.
Definition: variantdefs.hpp:50