38 #ifndef GOOGLE_PROTOBUF_TEXT_FORMAT_H__
39 #define GOOGLE_PROTOBUF_TEXT_FORMAT_H__
46 #include <google/protobuf/stubs/common.h>
47 #include <google/protobuf/descriptor.h>
48 #include <google/protobuf/message.h>
49 #include <google/protobuf/message_lite.h>
50 #include <google/protobuf/port.h>
52 #include <google/protobuf/port_def.inc>
55 #error "You cannot SWIG proto headers"
89 static bool PrintUnknownFieldsToString(
const UnknownFieldSet& unknown_fields,
100 class PROTOBUF_EXPORT BaseTextGenerator {
102 virtual ~BaseTextGenerator();
124 class PROTOBUF_EXPORT FastFieldValuePrinter {
126 FastFieldValuePrinter();
127 virtual ~FastFieldValuePrinter();
128 virtual void PrintBool(
bool val, BaseTextGenerator* generator)
const;
129 virtual void PrintInt32(
int32_t val, BaseTextGenerator* generator)
const;
130 virtual void PrintUInt32(
uint32_t val, BaseTextGenerator* generator)
const;
131 virtual void PrintInt64(
int64_t val, BaseTextGenerator* generator)
const;
132 virtual void PrintUInt64(
uint64_t val, BaseTextGenerator* generator)
const;
133 virtual void PrintFloat(
float val, BaseTextGenerator* generator)
const;
134 virtual void PrintDouble(
double val, BaseTextGenerator* generator)
const;
136 BaseTextGenerator* generator)
const;
138 BaseTextGenerator* generator)
const;
140 BaseTextGenerator* generator)
const;
141 virtual void PrintFieldName(
const Message&
message,
int field_index,
142 int field_count,
const Reflection* reflection,
144 BaseTextGenerator* generator)
const;
148 BaseTextGenerator* generator)
const;
149 virtual void PrintMessageStart(
const Message&
message,
int field_index,
150 int field_count,
bool single_line_mode,
151 BaseTextGenerator* generator)
const;
157 virtual bool PrintMessageContent(
const Message&
message,
int field_index,
158 int field_count,
bool single_line_mode,
159 BaseTextGenerator* generator)
const;
160 virtual void PrintMessageEnd(
const Message&
message,
int field_index,
161 int field_count,
bool single_line_mode,
162 BaseTextGenerator* generator)
const;
187 int field_index,
int field_count,
188 bool single_line_mode)
const;
191 bool single_line_mode)
const;
211 class PROTOBUF_EXPORT Finder {
244 class PROTOBUF_EXPORT
Printer {
266 initial_indent_level_ = indent_level;
272 single_line_mode_ = single_line_mode;
279 use_field_number_ = use_field_number;
288 use_short_repeated_primitives_ = use_short_repeated_primitives;
295 void SetUseUtf8StringEscaping(
bool as_utf8);
302 PROTOBUF_DEPRECATED_MSG(
"Please use FastFieldValuePrinter")
311 void SetHideUnknownFields(
bool hide) { hide_unknown_fields_ = hide; }
319 bool print_message_fields_in_index_order) {
320 print_message_fields_in_index_order_ =
321 print_message_fields_in_index_order;
344 const int64_t truncate_string_field_longer_than) {
345 truncate_string_field_longer_than_ = truncate_string_field_longer_than;
356 PROTOBUF_DEPRECATED_MSG(
"Please use FastFieldValuePrinter")
373 void SetInsertSilentMarker(
bool v) { insert_silent_marker_ =
v; }
381 class DebugStringFieldValuePrinter;
396 TextGenerator* generator)
const;
402 TextGenerator* generator)
const;
407 int field_count,
const Reflection* reflection,
409 TextGenerator* generator)
const;
415 TextGenerator* generator)
const;
421 TextGenerator* generator,
422 int recursion_budget)
const;
424 bool PrintAny(
const Message&
message, TextGenerator* generator)
const;
428 auto it = custom_printers_.find(
field);
429 return it == custom_printers_.end() ? default_field_value_printer_.get()
433 int initial_indent_level_;
434 bool single_line_mode_;
435 bool use_field_number_;
436 bool use_short_repeated_primitives_;
438 bool hide_unknown_fields_;
439 bool print_message_fields_in_index_order_;
443 std::unique_ptr<const FastFieldValuePrinter> default_field_value_printer_;
445 std::unique_ptr<const FastFieldValuePrinter>>
449 typedef std::map<const Descriptor*, std::unique_ptr<const MessagePrinter>>
495 :
line(line_param), column(column_param) {}
505 :
start(start_param),
end(end_param) {}
510 class PROTOBUF_EXPORT ParseInfoTree {
512 ParseInfoTree() =
default;
513 ParseInfoTree(
const ParseInfoTree&) =
delete;
514 ParseInfoTree& operator=(
const ParseInfoTree&) =
delete;
546 typedef std::map<const FieldDescriptor*, std::vector<ParseLocationRange>>
552 std::vector<std::unique_ptr<ParseInfoTree>>>
560 class PROTOBUF_EXPORT
Parser {
599 allow_case_insensitive_field_ = allow;
640 ParserImpl* parser_impl);
646 bool allow_case_insensitive_field_;
647 bool allow_unknown_field_;
648 bool allow_unknown_extension_;
649 bool allow_unknown_enum_;
650 bool allow_field_number_;
651 bool allow_relaxed_whitespace_;
652 bool allow_singular_overwrites_;
653 int recursion_limit_;
662 static inline void RecordLocation(ParseInfoTree* info_tree,
664 ParseLocationRange location);
665 static inline ParseInfoTree* CreateNested(ParseInfoTree* info_tree,
685 #include <google/protobuf/port_undef.inc>
687 #endif // GOOGLE_PROTOBUF_TEXT_FORMAT_H__