encoding: add Format helper function and method
The Format function and MarshalOptions.Format method are helper
functions for directly obtaining the formatted string for a message
without having to deal with errors or convert a []byte to string.
It is only intended for human consumption (e.g., debugging or logging).
We also add a MarshalOptions.Multiline option to specify that the output
should use some default indentation in a multiline output.
This assists in the v1 to v2 migration where:
protoV1.CompactTextString(m) => prototext.MarshalOptions{}.Format(m)
protoV1.MarshalTextString(m) => prototext.Format(m)
At Google, there are approximately 10x more usages of MarshalTextString than
CompactTextString, so it makes sense that the top-level Format function
does multiline expansion by default.
Fixes #850
Change-Id: I149c9e190a6d99b985d3884df675499a3313e9b3
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/213460
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/internal/impl/api_export.go b/internal/impl/api_export.go
index 54cf956..76dfdf7 100644
--- a/internal/impl/api_export.go
+++ b/internal/impl/api_export.go
@@ -166,14 +166,7 @@
// MessageStringOf returns the message value as a string,
// which is the message serialized in the protobuf text format.
func (Export) MessageStringOf(m pref.ProtoMessage) string {
- if m == nil || !m.ProtoReflect().IsValid() {
- return "<nil>"
- }
- b, _ := prototext.MarshalOptions{
- AllowPartial: true,
- EmitUnknown: true,
- }.Marshal(m)
- return string(b)
+ return prototext.MarshalOptions{Multiline: false}.Format(m)
}
// ExtensionDescFromType returns the legacy protoV1.ExtensionDesc for t.