diff --git a/src/sofa/pbrpc/pbjson.cc b/src/sofa/pbrpc/pbjson.cc index 341a907..bb42270 100644 --- a/src/sofa/pbrpc/pbjson.cc +++ b/src/sofa/pbrpc/pbjson.cc @@ -283,9 +283,9 @@ static int json2field(const rapidjson::Value* json, Message* msg, const FieldDes { case FieldDescriptor::CPPTYPE_INT32: { - if (json->GetType() != rapidjson::kNumberType) + if (!json->IsInt()) { - RETURN_ERR(ERR_INVALID_JSON, "Not a number"); + RETURN_ERR(ERR_INVALID_JSON, "Not an int32 number"); } if (repeated) { @@ -299,9 +299,9 @@ static int json2field(const rapidjson::Value* json, Message* msg, const FieldDes } case FieldDescriptor::CPPTYPE_UINT32: { - if (json->GetType() != rapidjson::kNumberType) + if (!json->IsUint()) { - RETURN_ERR(ERR_INVALID_JSON, "Not a number"); + RETURN_ERR(ERR_INVALID_JSON, "Not an uint32 number"); } if (repeated) { @@ -315,9 +315,9 @@ static int json2field(const rapidjson::Value* json, Message* msg, const FieldDes } case FieldDescriptor::CPPTYPE_INT64: { - if (json->GetType() != rapidjson::kNumberType) + if (!json->IsInt64()) { - RETURN_ERR(ERR_INVALID_JSON, "Not a number"); + RETURN_ERR(ERR_INVALID_JSON, "Not an int64 number"); } if (repeated) { @@ -331,9 +331,9 @@ static int json2field(const rapidjson::Value* json, Message* msg, const FieldDes } case FieldDescriptor::CPPTYPE_UINT64: { - if (json->GetType() != rapidjson::kNumberType) + if (!json->IsUint64()) { - RETURN_ERR(ERR_INVALID_JSON, "Not a number"); + RETURN_ERR(ERR_INVALID_JSON, "Not an uint64 number"); } if (repeated) { @@ -347,9 +347,9 @@ static int json2field(const rapidjson::Value* json, Message* msg, const FieldDes } case FieldDescriptor::CPPTYPE_DOUBLE: { - if (json->GetType() != rapidjson::kNumberType) + if (!json->IsDouble()) { - RETURN_ERR(ERR_INVALID_JSON, "Not a number"); + RETURN_ERR(ERR_INVALID_JSON, "Not a float number"); } if (repeated) { @@ -363,9 +363,9 @@ static int json2field(const rapidjson::Value* json, Message* msg, const FieldDes } case FieldDescriptor::CPPTYPE_FLOAT: { - if (json->GetType() != rapidjson::kNumberType) + if (!json->IsDouble()) { - RETURN_ERR(ERR_INVALID_JSON, "Not a number"); + RETURN_ERR(ERR_INVALID_JSON, "Not a float number"); } if (repeated) { @@ -379,7 +379,7 @@ static int json2field(const rapidjson::Value* json, Message* msg, const FieldDes } case FieldDescriptor::CPPTYPE_BOOL: { - if (json->GetType() != rapidjson::kTrueType && json->GetType() != rapidjson::kFalseType) + if (!json->IsBool()) { RETURN_ERR(ERR_INVALID_JSON, "Not a bool"); } @@ -396,7 +396,7 @@ static int json2field(const rapidjson::Value* json, Message* msg, const FieldDes } case FieldDescriptor::CPPTYPE_STRING: { - if (json->GetType() != rapidjson::kStringType) + if (!json->IsString()) { RETURN_ERR(ERR_INVALID_JSON, "Not a string"); } @@ -436,11 +436,23 @@ static int json2field(const rapidjson::Value* json, Message* msg, const FieldDes { const EnumDescriptor *ed = field->enum_type(); const EnumValueDescriptor *ev = 0; - if (json->GetType() == rapidjson::kNumberType) + if (json->IsInt()) { ev = ed->FindValueByNumber(json->GetInt()); } - else if (json->GetType() == rapidjson::kStringType) + else if (json->IsUint()) + { + ev = ed->FindValueByNumber(json->GetUint()); + } + else if (json->IsInt64()) + { + ev = ed->FindValueByNumber(json->GetInt64()); + } + else if (json->IsUint64()) + { + ev = ed->FindValueByNumber(json->GetUint64()); + } + else if (json->IsString()) { ev = ed->FindValueByName(json->GetString()); }