encoding/textpb: add tests for nil message in repeated and map
Updates golang/protobuf#798 by adding testcases to show the intention.
Also, slightly move code blocks in encode.go w/o affecting logic to make
it cleaner.
Change-Id: I14575f6e7139a0908483bd318b599339c2daf8ad
Reviewed-on: https://go-review.googlesource.com/c/161717
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/encoding/textpb/encode.go b/encoding/textpb/encode.go
index 73326d1..9f1da09 100644
--- a/encoding/textpb/encode.go
+++ b/encoding/textpb/encode.go
@@ -46,9 +46,7 @@
}
var nerr errors.NonFatal
- var v text.Value
- var err error
- v, err = o.marshalMessage(m.ProtoReflect())
+ v, err := o.marshalMessage(m.ProtoReflect())
if !nerr.Merge(err) {
return nil, err
}
@@ -99,10 +97,14 @@
continue
}
- tname := text.ValueOf(fd.Name())
+ name := text.ValueOf(fd.Name())
+ // Use type name for group field name.
+ if fd.Kind() == pref.GroupKind {
+ name = text.ValueOf(fd.MessageType().Name())
+ }
pval := knownFields.Get(num)
var err error
- msgFields, err = o.appendField(msgFields, tname, pval, fd)
+ msgFields, err = o.appendField(msgFields, name, pval, fd)
if !nerr.Merge(err) {
return text.Value{}, err
}
@@ -126,14 +128,9 @@
}
// appendField marshals a protoreflect.Value and appends it to the given [][2]text.Value.
-func (o MarshalOptions) appendField(msgFields [][2]text.Value, tname text.Value, pval pref.Value, fd pref.FieldDescriptor) ([][2]text.Value, error) {
+func (o MarshalOptions) appendField(msgFields [][2]text.Value, name text.Value, pval pref.Value, fd pref.FieldDescriptor) ([][2]text.Value, error) {
var nerr errors.NonFatal
- // Use type name for group field name.
- if fd.Kind() == pref.GroupKind {
- tname = text.ValueOf(fd.MessageType().Name())
- }
-
if fd.Cardinality() == pref.Repeated {
// Map or repeated fields.
var items []text.Value
@@ -152,7 +149,7 @@
// Add each item as key: value field.
for _, item := range items {
- msgFields = append(msgFields, [2]text.Value{tname, item})
+ msgFields = append(msgFields, [2]text.Value{name, item})
}
} else {
// Required or optional fields.
@@ -160,7 +157,7 @@
if !nerr.Merge(err) {
return msgFields, err
}
- msgFields = append(msgFields, [2]text.Value{tname, tval})
+ msgFields = append(msgFields, [2]text.Value{name, tval})
}
return msgFields, nerr.E