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)