| Index: third_party/protobuf/src/google/protobuf/text_format.h
|
| diff --git a/third_party/protobuf/src/google/protobuf/text_format.h b/third_party/protobuf/src/google/protobuf/text_format.h
|
| index 01f3ffb0865e673c68baee2fbc213a93c948eed5..ef3d4a8fd7905ce79c806dc6dfb751ebdeb25fe4 100644
|
| --- a/third_party/protobuf/src/google/protobuf/text_format.h
|
| +++ b/third_party/protobuf/src/google/protobuf/text_format.h
|
| @@ -1,6 +1,6 @@
|
| // Protocol Buffers - Google's data interchange format
|
| // Copyright 2008 Google Inc. All rights reserved.
|
| -// http://code.google.com/p/protobuf/
|
| +// https://developers.google.com/protocol-buffers/
|
| //
|
| // Redistribution and use in source and binary forms, with or without
|
| // modification, are permitted provided that the following conditions are
|
| @@ -39,11 +39,16 @@
|
| #define GOOGLE_PROTOBUF_TEXT_FORMAT_H__
|
|
|
| #include <map>
|
| +#include <memory>
|
| +#ifndef _SHARED_PTR_H
|
| +#include <google/protobuf/stubs/shared_ptr.h>
|
| +#endif
|
| #include <string>
|
| #include <vector>
|
| +
|
| #include <google/protobuf/stubs/common.h>
|
| -#include <google/protobuf/message.h>
|
| #include <google/protobuf/descriptor.h>
|
| +#include <google/protobuf/message.h>
|
|
|
| namespace google {
|
| namespace protobuf {
|
| @@ -85,6 +90,41 @@ class LIBPROTOBUF_EXPORT TextFormat {
|
| int index,
|
| string* output);
|
|
|
| + // The default printer that converts scalar values from fields into
|
| + // their string representation.
|
| + // You can derive from this FieldValuePrinter if you want to have
|
| + // fields to be printed in a different way and register it at the
|
| + // Printer.
|
| + class LIBPROTOBUF_EXPORT FieldValuePrinter {
|
| + public:
|
| + FieldValuePrinter();
|
| + virtual ~FieldValuePrinter();
|
| + virtual string PrintBool(bool val) const;
|
| + virtual string PrintInt32(int32 val) const;
|
| + virtual string PrintUInt32(uint32 val) const;
|
| + virtual string PrintInt64(int64 val) const;
|
| + virtual string PrintUInt64(uint64 val) const;
|
| + virtual string PrintFloat(float val) const;
|
| + virtual string PrintDouble(double val) const;
|
| + virtual string PrintString(const string& val) const;
|
| + virtual string PrintBytes(const string& val) const;
|
| + virtual string PrintEnum(int32 val, const string& name) const;
|
| + virtual string PrintFieldName(const Message& message,
|
| + const Reflection* reflection,
|
| + const FieldDescriptor* field) const;
|
| + virtual string PrintMessageStart(const Message& message,
|
| + int field_index,
|
| + int field_count,
|
| + bool single_line_mode) const;
|
| + virtual string PrintMessageEnd(const Message& message,
|
| + int field_index,
|
| + int field_count,
|
| + bool single_line_mode) const;
|
| +
|
| + private:
|
| + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldValuePrinter);
|
| + };
|
| +
|
| // Class for those users which require more fine-grained control over how
|
| // a protobuffer message is printed out.
|
| class LIBPROTOBUF_EXPORT Printer {
|
| @@ -120,6 +160,15 @@ class LIBPROTOBUF_EXPORT TextFormat {
|
| single_line_mode_ = single_line_mode;
|
| }
|
|
|
| + bool IsInSingleLineMode() {
|
| + return single_line_mode_;
|
| + }
|
| +
|
| + // If use_field_number is true, uses field number instead of field name.
|
| + void SetUseFieldNumber(bool use_field_number) {
|
| + use_field_number_ = use_field_number;
|
| + }
|
| +
|
| // Set true to print repeated primitives in a format like:
|
| // field_name: [1, 2, 3, 4]
|
| // instead of printing each value on its own line. Short format applies
|
| @@ -132,11 +181,64 @@ class LIBPROTOBUF_EXPORT TextFormat {
|
| // Set true to output UTF-8 instead of ASCII. The only difference
|
| // is that bytes >= 0x80 in string fields will not be escaped,
|
| // because they are assumed to be part of UTF-8 multi-byte
|
| - // sequences.
|
| - void SetUseUtf8StringEscaping(bool as_utf8) {
|
| - utf8_string_escaping_ = as_utf8;
|
| + // sequences. This will change the default FieldValuePrinter.
|
| + void SetUseUtf8StringEscaping(bool as_utf8);
|
| +
|
| + // Set the default FieldValuePrinter that is used for all fields that
|
| + // don't have a field-specific printer registered.
|
| + // Takes ownership of the printer.
|
| + void SetDefaultFieldValuePrinter(const FieldValuePrinter* printer);
|
| +
|
| + // Sets whether we want to hide unknown fields or not.
|
| + // Usually unknown fields are printed in a generic way that includes the
|
| + // tag number of the field instead of field name. However, sometimes it
|
| + // is useful to be able to print the message without unknown fields (e.g.
|
| + // for the python protobuf version to maintain consistency between its pure
|
| + // python and c++ implementations).
|
| + void SetHideUnknownFields(bool hide) {
|
| + hide_unknown_fields_ = hide;
|
| + }
|
| +
|
| + // If print_message_fields_in_index_order is true, print fields of a proto
|
| + // message using the order defined in source code instead of the field
|
| + // number. By default, use the field number order.
|
| + void SetPrintMessageFieldsInIndexOrder(
|
| + bool print_message_fields_in_index_order) {
|
| + print_message_fields_in_index_order_ =
|
| + print_message_fields_in_index_order;
|
| + }
|
| +
|
| + // If expand==true, expand google.protobuf.Any payloads. The output
|
| + // will be of form
|
| + // [type_url] { <value_printed_in_text> }
|
| + //
|
| + // If expand==false, print Any using the default printer. The output will
|
| + // look like
|
| + // type_url: "<type_url>" value: "serialized_content"
|
| + void SetExpandAny(bool expand) {
|
| + expand_any_ = expand;
|
| }
|
|
|
| + // If non-zero, we truncate all string fields that are longer than this
|
| + // threshold. This is useful when the proto message has very long strings,
|
| + // e.g., dump of encoded image file.
|
| + //
|
| + // NOTE(hfgong): Setting a non-zero value breaks round-trip safe
|
| + // property of TextFormat::Printer. That is, from the printed message, we
|
| + // cannot fully recover the original string field any more.
|
| + void SetTruncateStringFieldLongerThan(
|
| + const int64 truncate_string_field_longer_than) {
|
| + truncate_string_field_longer_than_ = truncate_string_field_longer_than;
|
| + }
|
| +
|
| + // Register a custom field-specific FieldValuePrinter for fields
|
| + // with a particular FieldDescriptor.
|
| + // Returns "true" if the registration succeeded, or "false", if there is
|
| + // already a printer for that FieldDescriptor.
|
| + // Takes ownership of the printer on successful registration.
|
| + bool RegisterFieldValuePrinter(const FieldDescriptor* field,
|
| + const FieldValuePrinter* printer);
|
| +
|
| private:
|
| // Forward declaration of an internal class used to print the text
|
| // output to the OutputStream (see text_format.cc for implementation).
|
| @@ -180,18 +282,45 @@ class LIBPROTOBUF_EXPORT TextFormat {
|
| void PrintUnknownFields(const UnknownFieldSet& unknown_fields,
|
| TextGenerator& generator) const;
|
|
|
| + bool PrintAny(const Message& message, TextGenerator& generator) const;
|
| +
|
| int initial_indent_level_;
|
|
|
| bool single_line_mode_;
|
|
|
| + bool use_field_number_;
|
| +
|
| bool use_short_repeated_primitives_;
|
|
|
| - bool utf8_string_escaping_;
|
| + bool hide_unknown_fields_;
|
| +
|
| + bool print_message_fields_in_index_order_;
|
| +
|
| + bool expand_any_;
|
| +
|
| + int64 truncate_string_field_longer_than_;
|
| +
|
| + google::protobuf::scoped_ptr<const FieldValuePrinter> default_field_value_printer_;
|
| + typedef map<const FieldDescriptor*,
|
| + const FieldValuePrinter*> CustomPrinterMap;
|
| + CustomPrinterMap custom_printers_;
|
| };
|
|
|
| // Parses a text-format protocol message from the given input stream to
|
| - // the given message object. This function parses the format written
|
| - // by Print().
|
| + // the given message object. This function parses the human-readable format
|
| + // written by Print(). Returns true on success. The message is cleared first,
|
| + // even if the function fails -- See Merge() to avoid this behavior.
|
| + //
|
| + // Example input: "user {\n id: 123 extra { gender: MALE language: 'en' }\n}"
|
| + //
|
| + // One use for this function is parsing handwritten strings in test code.
|
| + // Another use is to parse the output from google::protobuf::Message::DebugString()
|
| + // (or ShortDebugString()), because these functions output using
|
| + // google::protobuf::TextFormat::Print().
|
| + //
|
| + // If you would like to read a protocol buffer serialized in the
|
| + // (non-human-readable) binary wire format, see
|
| + // google::protobuf::MessageLite::ParseFromString().
|
| static bool Parse(io::ZeroCopyInputStream* input, Message* output);
|
| // Like Parse(), but reads directly from a string.
|
| static bool ParseFromString(const string& input, Message* output);
|
| @@ -314,12 +443,24 @@ class LIBPROTOBUF_EXPORT TextFormat {
|
| allow_partial_ = allow;
|
| }
|
|
|
| + // Allow field names to be matched case-insensitively.
|
| + // This is not advisable if there are fields that only differ in case, or
|
| + // if you want to enforce writing in the canonical form.
|
| + // This is 'false' by default.
|
| + void AllowCaseInsensitiveField(bool allow) {
|
| + allow_case_insensitive_field_ = allow;
|
| + }
|
| +
|
| // Like TextFormat::ParseFieldValueFromString
|
| bool ParseFieldValueFromString(const string& input,
|
| const FieldDescriptor* field,
|
| Message* output);
|
|
|
|
|
| + void AllowFieldNumber(bool allow) {
|
| + allow_field_number_ = allow;
|
| + }
|
| +
|
| private:
|
| // Forward declaration of an internal class used to parse text
|
| // representations (see text_format.cc for implementation).
|
| @@ -335,9 +476,15 @@ class LIBPROTOBUF_EXPORT TextFormat {
|
| Finder* finder_;
|
| ParseInfoTree* parse_info_tree_;
|
| bool allow_partial_;
|
| + bool allow_case_insensitive_field_;
|
| bool allow_unknown_field_;
|
| + bool allow_unknown_enum_;
|
| + bool allow_field_number_;
|
| + bool allow_relaxed_whitespace_;
|
| + bool allow_singular_overwrites_;
|
| };
|
|
|
| +
|
| private:
|
| // Hack: ParseInfoTree declares TextFormat as a friend which should extend
|
| // the friendship to TextFormat::Parser::ParserImpl, but unfortunately some
|
| @@ -358,6 +505,7 @@ inline void TextFormat::RecordLocation(ParseInfoTree* info_tree,
|
| info_tree->RecordLocation(field, location);
|
| }
|
|
|
| +
|
| inline TextFormat::ParseInfoTree* TextFormat::CreateNested(
|
| ParseInfoTree* info_tree, const FieldDescriptor* field) {
|
| return info_tree->CreateNested(field);
|
|
|