internal/impl: abstract away ExtensionDescV1 as the underlying descriptor
Add ExtensionField.{SetType,GetType} to hide the fact that the underlying
descriptor is actually an ExtensionDescV1.
Change-Id: I1d0595484ced0a88d2df0852a732fdf0fe9aa232
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/180538
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/impl/encode.go b/internal/impl/encode.go
index e3ba7cf..52ad799 100644
--- a/internal/impl/encode.go
+++ b/internal/impl/encode.go
@@ -130,21 +130,21 @@
return b, nerr.E
}
-func (mi *MessageInfo) sizeExtensions(ext *legacyExtensionMap, opts marshalOptions) (n int) {
+func (mi *MessageInfo) sizeExtensions(ext *map[int32]ExtensionField, opts marshalOptions) (n int) {
if ext == nil {
return 0
}
- for _, e := range *ext {
- ei := mi.extensionFieldInfo(e.Desc)
- if ei.funcs.size == nil {
+ for _, x := range *ext {
+ xi := mi.extensionFieldInfo(x.GetType())
+ if xi.funcs.size == nil {
continue
}
- n += ei.funcs.size(e.value, ei.tagsize, opts)
+ n += xi.funcs.size(x.GetValue(), xi.tagsize, opts)
}
return n
}
-func (mi *MessageInfo) appendExtensions(b []byte, ext *legacyExtensionMap, opts marshalOptions) ([]byte, error) {
+func (mi *MessageInfo) appendExtensions(b []byte, ext *map[int32]ExtensionField, opts marshalOptions) ([]byte, error) {
if ext == nil {
return b, nil
}
@@ -155,9 +155,9 @@
case 1:
// Fast-path for one extension: Don't bother sorting the keys.
var err error
- for _, e := range *ext {
- ei := mi.extensionFieldInfo(e.Desc)
- b, err = ei.funcs.marshal(b, e.value, ei.wiretag, opts)
+ for _, x := range *ext {
+ xi := mi.extensionFieldInfo(x.GetType())
+ b, err = xi.funcs.marshal(b, x.GetValue(), xi.wiretag, opts)
}
return b, err
default:
@@ -171,9 +171,9 @@
var err error
var nerr errors.NonFatal
for _, k := range keys {
- e := (*ext)[int32(k)]
- ei := mi.extensionFieldInfo(e.Desc)
- b, err = ei.funcs.marshal(b, e.value, ei.wiretag, opts)
+ x := (*ext)[int32(k)]
+ xi := mi.extensionFieldInfo(x.GetType())
+ b, err = xi.funcs.marshal(b, x.GetValue(), xi.wiretag, opts)
if !nerr.Merge(err) {
return b, err
}