27 from_json (
const Jsonipc::JsonValue &v)
32 case rapidjson::kNullType:
35 case rapidjson::kFalseType:
38 case rapidjson::kTrueType:
41 case rapidjson::kStringType:
42 val = Jsonipc::from_json<std::string> (v);
44 case rapidjson::kNumberType:
45 if (v.IsInt()) val = v.GetInt();
46 else if (v.IsUint()) val = v.GetUint();
47 else if (v.IsInt64()) val = v.GetInt64();
48 else if (v.IsUint64()) val =
int64 (v.GetUint64());
49 else val = v.GetDouble();
51 case rapidjson::kArrayType:
52 sequence_from_json_array (val, v);
54 case rapidjson::kObjectType:
55 value_from_json_object (val, v);
60 static Jsonipc::JsonValue
61 to_json (
const Value &val, Jsonipc::JsonAllocator &allocator)
63 using namespace Jsonipc;
69 case Value::STRING:
return Jsonipc::to_json (
std::get<String> (val), allocator);
70 case Value::ARRAY:
return sequence_to_json_array (
std::get<ValueS> (val), allocator);
71 case Value::RECORD:
return record_to_json_object (
std::get<ValueR> (val), allocator);
73 case Value::NONE:
return JsonValue();
78 sequence_from_json_array (
Value &val,
const Jsonipc::JsonValue &v)
80 const size_t l = v.Size();
83 for (
size_t i = 0; i < l; ++i)
84 s.push_back (ConvertValue::from_json (v[i]));
87 static Jsonipc::JsonValue
88 sequence_to_json_array (
const ValueS &seq, Jsonipc::JsonAllocator &allocator)
90 const size_t l = seq.
size();
91 Jsonipc::JsonValue jarray (rapidjson::kArrayType);
92 jarray.Reserve (l, allocator);
93 for (
size_t i = 0; i < l; ++i)
95 jarray.PushBack (ConvertValue::to_json (*seq[i], allocator).Move(), allocator);
99 value_from_json_object (
Value &val,
const Jsonipc::JsonValue &v)
103 for (
const auto &field : v.GetObject())
106 if (key ==
"$class" || key ==
"$id")
108 val = Jsonipc::from_json<InstanceP> (v);
111 rec[key] = ConvertValue::from_json (field.value);
113 val = std::move (rec);
115 static Jsonipc::JsonValue
116 record_to_json_object (
const ValueR &rec, Jsonipc::JsonAllocator &allocator)
118 Jsonipc::JsonValue jobject (rapidjson::kObjectType);
119 jobject.MemberReserve (rec.
size(), allocator);
120 for (
auto const &field : rec)
122 jobject.AddMember (Jsonipc::JsonValue (field.name.c_str(), allocator),
123 ConvertValue::to_json (*field.value, allocator).Move(), allocator);
149 from_json (
const Jsonipc::JsonValue &v)
155 for (
const auto &field : v.GetObject())
158 rec[key] = ConvertValue::from_json (field.value);
163 static Jsonipc::JsonValue
164 to_json (
const ValueR &rec, Jsonipc::JsonAllocator &allocator)
166 Jsonipc::JsonValue jobject (rapidjson::kObjectType);
167 jobject.MemberReserve (rec.
size(), allocator);
168 for (
auto const &field : rec)
170 jobject.AddMember (Jsonipc::JsonValue (field.name.c_str(), allocator),
171 ConvertValue::to_json (*field.value, allocator).Move(), allocator);