Status AddSingleValueAndAdvance()

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