internal/impl: support packed extensions
Change-Id: I5a9e22f1c98f5db9caae1681775017da5aa67394
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/185541
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/impl/codec_reflect.go b/internal/impl/codec_reflect.go
index d307efe..b83a3b3 100644
--- a/internal/impl/codec_reflect.go
+++ b/internal/impl/codec_reflect.go
@@ -104,35 +104,12 @@
unmarshal: consumeEnumSlice,
}
-func sizeEnumPackedSlice(p pointer, tagsize int, _ marshalOptions) (size int) {
- s := p.v.Elem()
- slen := s.Len()
- if slen == 0 {
- return 0
- }
- n := 0
- for i := 0; i < slen; i++ {
- n += wire.SizeVarint(uint64(s.Index(i).Int()))
- }
- return tagsize + wire.SizeBytes(n)
+func sizeEnumPackedSlice(p pointer, tagsize int, opts marshalOptions) (size int) {
+ return sizeEnumPackedSliceReflect(p.v.Elem(), tagsize, opts)
}
func appendEnumPackedSlice(b []byte, p pointer, wiretag uint64, opts marshalOptions) ([]byte, error) {
- s := p.v.Elem()
- slen := s.Len()
- if slen == 0 {
- return b, nil
- }
- b = wire.AppendVarint(b, wiretag)
- n := 0
- for i := 0; i < slen; i++ {
- n += wire.SizeVarint(uint64(s.Index(i).Int()))
- }
- b = wire.AppendVarint(b, uint64(n))
- for i := 0; i < slen; i++ {
- b = wire.AppendVarint(b, uint64(s.Index(i).Int()))
- }
- return b, nil
+ return appendEnumPackedSliceReflect(b, p.v.Elem(), wiretag, opts)
}
var coderEnumPackedSlice = pointerCoderFuncs{