in tensorflow_serving/util/json_tensor.cc [233:285]
Status AddValueToTensor(const rapidjson::Value& val, DataType dtype,
TensorProto* tensor) {
switch (dtype) {
case DT_FLOAT:
if (!val.IsNumber()) return TypeError(val, dtype);
tensor->add_float_val(val.GetFloat());
break;
case DT_DOUBLE:
if (!val.IsNumber()) return TypeError(val, dtype);
tensor->add_double_val(val.GetDouble());
break;
case DT_INT32:
case DT_INT16:
case DT_INT8:
case DT_UINT8:
if (!val.IsInt()) return TypeError(val, dtype);
tensor->add_int_val(val.GetInt());
break;
case DT_STRING:
if (!val.IsString()) return TypeError(val, dtype);
tensor->add_string_val(val.GetString(), val.GetStringLength());
break;
case DT_INT64:
if (!val.IsInt64()) return TypeError(val, dtype);
tensor->add_int64_val(val.GetInt64());
break;
case DT_BOOL:
if (!val.IsBool()) return TypeError(val, dtype);
tensor->add_bool_val(val.GetBool());
break;
case DT_UINT32:
if (!val.IsUint()) return TypeError(val, dtype);
tensor->add_uint32_val(val.GetUint());
break;
case DT_UINT64:
if (!val.IsUint64()) return TypeError(val, dtype);
tensor->add_uint64_val(val.GetUint64());
break;
default:
return errors::Unimplemented(
"Conversion of JSON Value: ", JsonValueToString(val),
" to type: ", DataTypeString(dtype));
}
return Status::OK();
}