26 from_json (
const Jsonipc::JsonValue &v)
31 case rapidjson::kNullType:
34 case rapidjson::kFalseType:
37 case rapidjson::kTrueType:
40 case rapidjson::kStringType:
41 val = Jsonipc::from_json<std::string> (v);
43 case rapidjson::kNumberType:
44 if (v.IsInt()) val = v.GetInt();
45 else if (v.IsUint()) val = v.GetUint();
46 else if (v.IsInt64()) val = v.GetInt64();
47 else if (v.IsUint64()) val =
int64 (v.GetUint64());
48 else val = v.GetDouble();
50 case rapidjson::kArrayType:
51 sequence_from_json_array (val, v);
53 case rapidjson::kObjectType:
54 value_from_json_object (val, v);
59 static Jsonipc::JsonValue
60 to_json (
const Value &val, Jsonipc::JsonAllocator &allocator)
62 using namespace Jsonipc;
68 case Value::STRING:
return Jsonipc::to_json (
std::get<String> (val), allocator);
69 case Value::ARRAY:
return sequence_to_json_array (
std::get<ValueS> (val), allocator);
70 case Value::RECORD:
return record_to_json_object (
std::get<ValueR> (val), allocator);
72 case Value::NONE:
return JsonValue();
77 sequence_from_json_array (
Value &val,
const Jsonipc::JsonValue &v)
79 const size_t l = v.Size();
82 for (
size_t i = 0; i < l; ++i)
83 s.push_back (ConvertValue::from_json (v[i]));
86 static Jsonipc::JsonValue
87 sequence_to_json_array (
const ValueS &seq, Jsonipc::JsonAllocator &allocator)
89 const size_t l = seq.
size();
90 Jsonipc::JsonValue jarray (rapidjson::kArrayType);
91 jarray.Reserve (l, allocator);
92 for (
size_t i = 0; i < l; ++i)
94 jarray.PushBack (ConvertValue::to_json (*seq[i], allocator).Move(), allocator);
98 value_from_json_object (
Value &val,
const Jsonipc::JsonValue &v)
102 for (
const auto &field : v.GetObject())
105 if (key ==
"$class" || key ==
"$id")
107 val = Jsonipc::from_json<InstanceP> (v);
110 rec[key] = ConvertValue::from_json (field.value);
112 val = std::move (rec);
114 static Jsonipc::JsonValue
115 record_to_json_object (
const ValueR &rec, Jsonipc::JsonAllocator &allocator)
117 Jsonipc::JsonValue jobject (rapidjson::kObjectType);
118 jobject.MemberReserve (rec.
size(), allocator);
119 for (
auto const &field : rec)
121 jobject.AddMember (Jsonipc::JsonValue (field.name.c_str(), allocator),
122 ConvertValue::to_json (*field.value, allocator).Move(), allocator);
148 from_json (
const Jsonipc::JsonValue &v)
154 for (
const auto &field : v.GetObject())
157 rec[key] = ConvertValue::from_json (field.value);
162 static Jsonipc::JsonValue
163 to_json (
const ValueR &rec, Jsonipc::JsonAllocator &allocator)
165 Jsonipc::JsonValue jobject (rapidjson::kObjectType);
166 jobject.MemberReserve (rec.
size(), allocator);
167 for (
auto const &field : rec)
169 jobject.AddMember (Jsonipc::JsonValue (field.name.c_str(), allocator),
170 ConvertValue::to_json (*field.value, allocator).Move(), allocator);