in tensorflow_serving/util/json_tensor.cc [831:893]
Status AddSingleValueAndAdvance(const TensorProto& tensor, bool string_as_bytes,
RapidJsonWriter* writer, int* offset) {
bool success = false;
switch (tensor.dtype()) {
case DT_FLOAT:
success = WriteDecimal(writer, tensor.float_val(*offset));
break;
case DT_DOUBLE:
success = WriteDecimal(writer, tensor.double_val(*offset));
break;
case DT_INT32:
case DT_INT16:
case DT_INT8:
case DT_UINT8:
success = writer->Int(tensor.int_val(*offset));
break;
case DT_STRING: {
const string& str = tensor.string_val(*offset);
if (string_as_bytes) {
// Write bytes as { "b64": <base64-encoded-string> }
string base64;
absl::Base64Escape(str, &base64);
writer->StartObject();
writer->Key(kBase64Key);
success = writer->String(base64.c_str(), base64.size());
writer->EndObject();
} else {
success = writer->String(str.c_str(), str.size());
}
break;
}
case DT_INT64:
success = writer->Int64(tensor.int64_val(*offset));
break;
case DT_BOOL:
success = writer->Bool(tensor.bool_val(*offset));
break;
case DT_UINT32:
success = writer->Uint(tensor.uint32_val(*offset));
break;
case DT_UINT64:
success = writer->Uint64(tensor.uint64_val(*offset));
break;
default:
success = false;
break;
}
if (!success) {
return errors::InvalidArgument(
"Failed to write JSON value for tensor type: ",
DataTypeString(tensor.dtype()));
}
(*offset)++;
return Status::OK();
}