19 #include <msgpack.hpp>
25 namespace fv_converter {
29 const char* NULL_VALUE =
"NULL";
32 const msgpack::object&
object,
33 const std::string& path,
35 switch (
object.type) {
36 case msgpack::type::NIL: {
37 datum.string_values_.push_back(std::make_pair(path, NULL_VALUE));
41 case msgpack::type::BOOLEAN: {
42 double v =
object.via.boolean ? 1. : 0.;
43 datum.num_values_.push_back(std::make_pair(path, v));
47 case msgpack::type::POSITIVE_INTEGER: {
48 double v =
object.via.u64;
49 datum.num_values_.push_back(std::make_pair(path, v));
53 case msgpack::type::NEGATIVE_INTEGER: {
54 double v =
object.via.i64;
55 datum.num_values_.push_back(std::make_pair(path, v));
59 case msgpack::type::DOUBLE: {
60 double v =
object.via.dec;
61 datum.num_values_.push_back(std::make_pair(path, v));
65 case msgpack::type::RAW: {
66 const msgpack::object_raw& raw =
object.via.raw;
67 datum.string_values_.push_back(
68 std::make_pair(path, std::string(raw.ptr, raw.size)));
72 case msgpack::type::ARRAY: {
73 const msgpack::object_array& array =
object.via.array;
74 for (uint32_t i = 0; i < array.size; ++i) {
75 std::ostringstream oss;
76 oss << path <<
"[" << i <<
"]";
77 iter_convert(array.ptr[i], oss.str(), datum);
82 case msgpack::type::MAP: {
83 const msgpack::object_map& map =
object.via.map;
84 for (uint32_t i = 0; i < map.size; ++i) {
85 const msgpack::object_kv& kv = map.ptr[i];
86 std::ostringstream oss;
87 oss << path <<
"/" << kv.key;
88 iter_convert(kv.val, oss.str(), datum);
97 iter_convert(
object,
"", datum);
static void convert(const msgpack::object &object, datum &ret_datum)