|
|
|
@ -2699,18 +2699,23 @@ void TextFormat::Printer::PrintFieldValue(const Message& message, |
|
|
|
|
return Parser().ParseFieldValueFromString(input, field, message); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename... T> |
|
|
|
|
PROTOBUF_NOINLINE void TextFormat::OutOfLinePrintString( |
|
|
|
|
BaseTextGenerator* generator, const T&... values) { |
|
|
|
|
generator->PrintString(absl::StrCat(values...)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void TextFormat::Printer::PrintUnknownFields( |
|
|
|
|
const UnknownFieldSet& unknown_fields, BaseTextGenerator* generator, |
|
|
|
|
int recursion_budget) const { |
|
|
|
|
for (int i = 0; i < unknown_fields.field_count(); i++) { |
|
|
|
|
const UnknownField& field = unknown_fields.field(i); |
|
|
|
|
std::string field_number = absl::StrCat(field.number()); |
|
|
|
|
|
|
|
|
|
switch (field.type()) { |
|
|
|
|
case UnknownField::TYPE_VARINT: |
|
|
|
|
generator->PrintString(field_number); |
|
|
|
|
OutOfLinePrintString(generator, field.number()); |
|
|
|
|
generator->PrintMaybeWithMarker(MarkerToken(), ": "); |
|
|
|
|
generator->PrintString(absl::StrCat(field.varint())); |
|
|
|
|
OutOfLinePrintString(generator, field.varint()); |
|
|
|
|
if (single_line_mode_) { |
|
|
|
|
generator->PrintLiteral(" "); |
|
|
|
|
} else { |
|
|
|
@ -2718,10 +2723,10 @@ void TextFormat::Printer::PrintUnknownFields( |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case UnknownField::TYPE_FIXED32: { |
|
|
|
|
generator->PrintString(field_number); |
|
|
|
|
OutOfLinePrintString(generator, field.number()); |
|
|
|
|
generator->PrintMaybeWithMarker(MarkerToken(), ": ", "0x"); |
|
|
|
|
generator->PrintString( |
|
|
|
|
absl::StrCat(absl::Hex(field.fixed32(), absl::kZeroPad8))); |
|
|
|
|
OutOfLinePrintString(generator, |
|
|
|
|
absl::Hex(field.fixed32(), absl::kZeroPad8)); |
|
|
|
|
if (single_line_mode_) { |
|
|
|
|
generator->PrintLiteral(" "); |
|
|
|
|
} else { |
|
|
|
@ -2730,10 +2735,10 @@ void TextFormat::Printer::PrintUnknownFields( |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case UnknownField::TYPE_FIXED64: { |
|
|
|
|
generator->PrintString(field_number); |
|
|
|
|
OutOfLinePrintString(generator, field.number()); |
|
|
|
|
generator->PrintMaybeWithMarker(MarkerToken(), ": ", "0x"); |
|
|
|
|
generator->PrintString( |
|
|
|
|
absl::StrCat(absl::Hex(field.fixed64(), absl::kZeroPad16))); |
|
|
|
|
OutOfLinePrintString(generator, |
|
|
|
|
absl::Hex(field.fixed64(), absl::kZeroPad16)); |
|
|
|
|
if (single_line_mode_) { |
|
|
|
|
generator->PrintLiteral(" "); |
|
|
|
|
} else { |
|
|
|
@ -2742,7 +2747,7 @@ void TextFormat::Printer::PrintUnknownFields( |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case UnknownField::TYPE_LENGTH_DELIMITED: { |
|
|
|
|
generator->PrintString(field_number); |
|
|
|
|
OutOfLinePrintString(generator, field.number()); |
|
|
|
|
const std::string& value = field.length_delimited(); |
|
|
|
|
// We create a CodedInputStream so that we can adhere to our recursion
|
|
|
|
|
// budget when we attempt to parse the data. UnknownFieldSet parsing is
|
|
|
|
@ -2783,7 +2788,7 @@ void TextFormat::Printer::PrintUnknownFields( |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case UnknownField::TYPE_GROUP: |
|
|
|
|
generator->PrintString(field_number); |
|
|
|
|
OutOfLinePrintString(generator, field.number()); |
|
|
|
|
if (single_line_mode_) { |
|
|
|
|
generator->PrintMaybeWithMarker(MarkerToken(), " ", "{ "); |
|
|
|
|
} else { |
|
|
|
|