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);