encoding/textpb: unmarshal Any
Also fix marshaling Any in expanded form to contain the correct type_url
value.
Change-Id: I4b467e74bb1d73255effd9cc4cfff9cf4558940f
Reviewed-on: https://go-review.googlesource.com/c/156342
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/encoding/textpb/encode.go b/encoding/textpb/encode.go
index 57a35c6..77606da 100644
--- a/encoding/textpb/encode.go
+++ b/encoding/textpb/encode.go
@@ -375,10 +375,10 @@
}
knownFields := m.KnownFields()
- typeURL := knownFields.Get(tfd.Number())
+ typeURL := knownFields.Get(tfd.Number()).String()
value := knownFields.Get(vfd.Number())
- emt, err := o.Resolver.FindMessageByURL(typeURL.String())
+ emt, err := o.Resolver.FindMessageByURL(typeURL)
if !nerr.Merge(err) {
return text.Value{}, err
}
@@ -393,12 +393,11 @@
if !nerr.Merge(err) {
return text.Value{}, err
}
- // Expanded Any field value contains only a single field with the embedded
- // message type as the field name in [] and a text marshaled field value of
- // the embedded message.
+ // Expanded Any field value contains only a single field with the type_url field value as the
+ // field name in [] and a text marshaled field value of the embedded message.
msgFields := [][2]text.Value{
{
- text.ValueOf(string(emt.FullName())),
+ text.ValueOf(typeURL),
msg,
},
}