| Index: third_party/protobuf/src/google/protobuf/util/json_util.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/util/json_util.cc b/third_party/protobuf/src/google/protobuf/util/json_util.cc
|
| index c3b8d502e3ae86350067df2d6fcf985c20c78a31..2659320a159b26933030cdad5fa1da600d49f75b 100644
|
| --- a/third_party/protobuf/src/google/protobuf/util/json_util.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/util/json_util.cc
|
| @@ -102,6 +102,42 @@ util::Status BinaryToJsonString(TypeResolver* resolver,
|
| options);
|
| }
|
|
|
| +namespace {
|
| +class StatusErrorListener : public converter::ErrorListener {
|
| + public:
|
| + StatusErrorListener() : status_(util::Status::OK) {}
|
| + virtual ~StatusErrorListener() {}
|
| +
|
| + util::Status GetStatus() { return status_; }
|
| +
|
| + virtual void InvalidName(const converter::LocationTrackerInterface& loc,
|
| + StringPiece unknown_name, StringPiece message) {
|
| + status_ = util::Status(util::error::INVALID_ARGUMENT,
|
| + loc.ToString() + ": " + message.ToString());
|
| + }
|
| +
|
| + virtual void InvalidValue(const converter::LocationTrackerInterface& loc,
|
| + StringPiece type_name, StringPiece value) {
|
| + status_ =
|
| + util::Status(util::error::INVALID_ARGUMENT,
|
| + loc.ToString() + ": invalid value " + value.ToString() +
|
| + " for type " + type_name.ToString());
|
| + }
|
| +
|
| + virtual void MissingField(const converter::LocationTrackerInterface& loc,
|
| + StringPiece missing_name) {
|
| + status_ = util::Status(
|
| + util::error::INVALID_ARGUMENT,
|
| + loc.ToString() + ": missing field " + missing_name.ToString());
|
| + }
|
| +
|
| + private:
|
| + util::Status status_;
|
| +
|
| + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(StatusErrorListener);
|
| +};
|
| +} // namespace
|
| +
|
| util::Status JsonToBinaryStream(TypeResolver* resolver,
|
| const string& type_url,
|
| io::ZeroCopyInputStream* json_input,
|
| @@ -109,7 +145,7 @@ util::Status JsonToBinaryStream(TypeResolver* resolver,
|
| google::protobuf::Type type;
|
| RETURN_IF_ERROR(resolver->ResolveMessageType(type_url, &type));
|
| internal::ZeroCopyStreamByteSink sink(binary_output);
|
| - converter::NoopErrorListener listener;
|
| + StatusErrorListener listener;
|
| converter::ProtoStreamObjectWriter proto_writer(resolver, type, &sink,
|
| &listener);
|
|
|
| @@ -123,7 +159,7 @@ util::Status JsonToBinaryStream(TypeResolver* resolver,
|
| }
|
| RETURN_IF_ERROR(parser.FinishParse());
|
|
|
| - return util::Status::OK;
|
| + return listener.GetStatus();
|
| }
|
|
|
| util::Status JsonToBinaryString(TypeResolver* resolver,
|
|
|