encoding/textpb: fix handling of group field name
Group field name in textproto should be the type name. Its field name
is derived from lowercasing its type name.
Change-Id: Ia12aafe934d3a59f3e07d09fe7939cfa6595a7b8
Reviewed-on: https://go-review.googlesource.com/c/157821
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/encoding/textpb/decode.go b/encoding/textpb/decode.go
index c2bfc0e..f7b10ad 100644
--- a/encoding/textpb/decode.go
+++ b/encoding/textpb/decode.go
@@ -6,6 +6,7 @@
import (
"fmt"
+ "strings"
"github.com/golang/protobuf/v2/internal/encoding/text"
"github.com/golang/protobuf/v2/internal/errors"
@@ -103,6 +104,10 @@
case text.Name:
name, _ = tkey.Name()
fd = fieldDescs.ByName(name)
+ if fd == nil {
+ // Check if this is a group field.
+ fd = fieldDescs.ByName(pref.Name(strings.ToLower(string(name))))
+ }
case text.String:
// TODO: Handle Any expansions here as well.
diff --git a/encoding/textpb/decode_test.go b/encoding/textpb/decode_test.go
index 00d8215..9911362 100644
--- a/encoding/textpb/decode_test.go
+++ b/encoding/textpb/decode_test.go
@@ -417,7 +417,7 @@
inputMessage: &pb2.Nests{},
inputText: `
opt_nested: {}
-optgroup: {}
+OptGroup: {}
`,
wantMessage: &pb2.Nests{
OptNested: &pb2.Nested{},
@@ -585,11 +585,11 @@
desc: "repeated group fields",
inputMessage: &pb2.Nests{},
inputText: `
-rptgroup: {
+RptGroup: {
rpt_bool: true
rpt_bool: false
}
-rptgroup: {}
+RptGroup: {}
`,
wantMessage: &pb2.Nests{
Rptgroup: []*pb2.Nests_RptGroup{
diff --git a/encoding/textpb/encode.go b/encoding/textpb/encode.go
index fbbdd0f..57a35c6 100644
--- a/encoding/textpb/encode.go
+++ b/encoding/textpb/encode.go
@@ -153,6 +153,10 @@
if !nerr.Merge(err) {
return msgFields, err
}
+ // Use type name for group field name.
+ if fd.Kind() == pref.GroupKind {
+ tname = text.ValueOf(fd.MessageType().Name())
+ }
msgFields = append(msgFields, [2]text.Value{tname, tval})
}
diff --git a/encoding/textpb/encode_test.go b/encoding/textpb/encode_test.go
index 83cbbc5..9871e75 100644
--- a/encoding/textpb/encode_test.go
+++ b/encoding/textpb/encode_test.go
@@ -316,7 +316,7 @@
Optgroup: &pb2.Nests_OptGroup{},
},
want: `opt_nested: {}
-optgroup: {}
+OptGroup: {}
`,
}, {
desc: "proto2 nested messages",
@@ -349,13 +349,13 @@
},
},
},
- want: `optgroup: {
+ want: `OptGroup: {
opt_bool: true
opt_string: "inside a group"
opt_nested: {
opt_string: "nested message inside a group"
}
- optnestedgroup: {
+ OptNestedGroup: {
opt_enum: TENTH
}
}