blob: fac941a2077ce108893853c78deb657ac9ea0dfb [file] [log] [blame]
Damien Neilc37adef2019-04-01 13:49:56 -07001// Copyright 2018 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style.
3// license that can be found in the LICENSE file.
4
5// Code generated by generate-types. DO NOT EDIT.
6
7package impl
8
9import (
10 "math"
Joe Tsaic51e2e02019-07-13 00:44:41 -070011 "unicode/utf8"
Damien Neilc37adef2019-04-01 13:49:56 -070012
13 "google.golang.org/protobuf/internal/encoding/wire"
14 "google.golang.org/protobuf/reflect/protoreflect"
15)
16
17// sizeBool returns the size of wire encoding a bool pointer as a Bool.
Damien Neil316febd2020-02-09 12:26:50 -080018func sizeBool(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -070019 v := *p.Bool()
Damien Neil316febd2020-02-09 12:26:50 -080020 return f.tagsize + wire.SizeVarint(wire.EncodeBool(v))
Damien Neilc37adef2019-04-01 13:49:56 -070021}
22
23// appendBool wire encodes a bool pointer as a Bool.
Damien Neil316febd2020-02-09 12:26:50 -080024func appendBool(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -070025 v := *p.Bool()
Damien Neil316febd2020-02-09 12:26:50 -080026 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -070027 b = wire.AppendVarint(b, wire.EncodeBool(v))
28 return b, nil
29}
30
Damien Neile91877d2019-06-27 10:54:42 -070031// consumeBool wire decodes a bool pointer as a Bool.
Damien Neil316febd2020-02-09 12:26:50 -080032func consumeBool(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -070033 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -080034 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -070035 }
Damien Neiladbbc8e2020-01-24 17:01:14 -080036 var v uint64
37 var n int
38 if len(b) >= 1 && b[0] < 0x80 {
39 v = uint64(b[0])
40 n = 1
41 } else if len(b) >= 2 && b[1] < 128 {
42 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
43 n = 2
44 } else {
45 v, n = wire.ConsumeVarint(b)
46 }
Damien Neile91877d2019-06-27 10:54:42 -070047 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -080048 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -070049 }
50 *p.Bool() = wire.DecodeBool(v)
Damien Neilf0831e82020-01-21 14:25:12 -080051 out.n = n
52 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -070053}
54
Damien Neilc37adef2019-04-01 13:49:56 -070055var coderBool = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -070056 size: sizeBool,
57 marshal: appendBool,
58 unmarshal: consumeBool,
Damien Neile8e88752020-02-11 11:25:16 -080059 merge: mergeBool,
Damien Neilc37adef2019-04-01 13:49:56 -070060}
61
Joe Tsaic51e2e02019-07-13 00:44:41 -070062// sizeBoolNoZero returns the size of wire encoding a bool pointer as a Bool.
Damien Neilc37adef2019-04-01 13:49:56 -070063// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -080064func sizeBoolNoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -070065 v := *p.Bool()
66 if v == false {
67 return 0
68 }
Damien Neil316febd2020-02-09 12:26:50 -080069 return f.tagsize + wire.SizeVarint(wire.EncodeBool(v))
Damien Neilc37adef2019-04-01 13:49:56 -070070}
71
Joe Tsaic51e2e02019-07-13 00:44:41 -070072// appendBoolNoZero wire encodes a bool pointer as a Bool.
Damien Neilc37adef2019-04-01 13:49:56 -070073// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -080074func appendBoolNoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -070075 v := *p.Bool()
76 if v == false {
77 return b, nil
78 }
Damien Neil316febd2020-02-09 12:26:50 -080079 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -070080 b = wire.AppendVarint(b, wire.EncodeBool(v))
81 return b, nil
82}
83
84var coderBoolNoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -070085 size: sizeBoolNoZero,
86 marshal: appendBoolNoZero,
87 unmarshal: consumeBool,
Damien Neile8e88752020-02-11 11:25:16 -080088 merge: mergeBoolNoZero,
Damien Neilc37adef2019-04-01 13:49:56 -070089}
90
91// sizeBoolPtr returns the size of wire encoding a *bool pointer as a Bool.
92// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -080093func sizeBoolPtr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -070094 v := **p.BoolPtr()
Damien Neil316febd2020-02-09 12:26:50 -080095 return f.tagsize + wire.SizeVarint(wire.EncodeBool(v))
Damien Neilc37adef2019-04-01 13:49:56 -070096}
97
Damien Neile91877d2019-06-27 10:54:42 -070098// appendBoolPtr wire encodes a *bool pointer as a Bool.
Damien Neilc37adef2019-04-01 13:49:56 -070099// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -0800100func appendBoolPtr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -0700101 v := **p.BoolPtr()
Damien Neil316febd2020-02-09 12:26:50 -0800102 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -0700103 b = wire.AppendVarint(b, wire.EncodeBool(v))
104 return b, nil
105}
106
Damien Neile91877d2019-06-27 10:54:42 -0700107// consumeBoolPtr wire decodes a *bool pointer as a Bool.
Damien Neil316febd2020-02-09 12:26:50 -0800108func consumeBoolPtr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -0700109 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800110 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -0700111 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800112 var v uint64
113 var n int
114 if len(b) >= 1 && b[0] < 0x80 {
115 v = uint64(b[0])
116 n = 1
117 } else if len(b) >= 2 && b[1] < 128 {
118 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
119 n = 2
120 } else {
121 v, n = wire.ConsumeVarint(b)
122 }
Damien Neile91877d2019-06-27 10:54:42 -0700123 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800124 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700125 }
126 vp := p.BoolPtr()
127 if *vp == nil {
128 *vp = new(bool)
129 }
130 **vp = wire.DecodeBool(v)
Damien Neilf0831e82020-01-21 14:25:12 -0800131 out.n = n
132 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700133}
134
Damien Neilc37adef2019-04-01 13:49:56 -0700135var coderBoolPtr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -0700136 size: sizeBoolPtr,
137 marshal: appendBoolPtr,
138 unmarshal: consumeBoolPtr,
Damien Neile8e88752020-02-11 11:25:16 -0800139 merge: mergeBoolPtr,
Damien Neilc37adef2019-04-01 13:49:56 -0700140}
141
142// sizeBoolSlice returns the size of wire encoding a []bool pointer as a repeated Bool.
Damien Neil316febd2020-02-09 12:26:50 -0800143func sizeBoolSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -0700144 s := *p.BoolSlice()
145 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -0800146 size += f.tagsize + wire.SizeVarint(wire.EncodeBool(v))
Damien Neilc37adef2019-04-01 13:49:56 -0700147 }
148 return size
149}
150
151// appendBoolSlice encodes a []bool pointer as a repeated Bool.
Damien Neil316febd2020-02-09 12:26:50 -0800152func appendBoolSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -0700153 s := *p.BoolSlice()
154 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -0800155 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -0700156 b = wire.AppendVarint(b, wire.EncodeBool(v))
157 }
158 return b, nil
159}
160
Damien Neile91877d2019-06-27 10:54:42 -0700161// consumeBoolSlice wire decodes a []bool pointer as a repeated Bool.
Damien Neil316febd2020-02-09 12:26:50 -0800162func consumeBoolSlice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -0700163 sp := p.BoolSlice()
164 if wtyp == wire.BytesType {
165 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -0800166 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -0700167 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800168 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700169 }
170 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -0800171 var v uint64
172 var n int
173 if len(b) >= 1 && b[0] < 0x80 {
174 v = uint64(b[0])
175 n = 1
176 } else if len(b) >= 2 && b[1] < 128 {
177 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
178 n = 2
179 } else {
180 v, n = wire.ConsumeVarint(b)
181 }
Damien Neile91877d2019-06-27 10:54:42 -0700182 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800183 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700184 }
185 s = append(s, wire.DecodeBool(v))
186 b = b[n:]
187 }
188 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -0800189 out.n = n
190 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700191 }
192 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800193 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -0700194 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800195 var v uint64
196 var n int
197 if len(b) >= 1 && b[0] < 0x80 {
198 v = uint64(b[0])
199 n = 1
200 } else if len(b) >= 2 && b[1] < 128 {
201 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
202 n = 2
203 } else {
204 v, n = wire.ConsumeVarint(b)
205 }
Damien Neile91877d2019-06-27 10:54:42 -0700206 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800207 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700208 }
209 *sp = append(*sp, wire.DecodeBool(v))
Damien Neilf0831e82020-01-21 14:25:12 -0800210 out.n = n
211 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700212}
213
Damien Neilc37adef2019-04-01 13:49:56 -0700214var coderBoolSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -0700215 size: sizeBoolSlice,
216 marshal: appendBoolSlice,
217 unmarshal: consumeBoolSlice,
Damien Neile8e88752020-02-11 11:25:16 -0800218 merge: mergeBoolSlice,
Damien Neilc37adef2019-04-01 13:49:56 -0700219}
220
221// sizeBoolPackedSlice returns the size of wire encoding a []bool pointer as a packed repeated Bool.
Damien Neil316febd2020-02-09 12:26:50 -0800222func sizeBoolPackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -0700223 s := *p.BoolSlice()
224 if len(s) == 0 {
225 return 0
226 }
227 n := 0
228 for _, v := range s {
229 n += wire.SizeVarint(wire.EncodeBool(v))
230 }
Damien Neil316febd2020-02-09 12:26:50 -0800231 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -0700232}
233
234// appendBoolPackedSlice encodes a []bool pointer as a packed repeated Bool.
Damien Neil316febd2020-02-09 12:26:50 -0800235func appendBoolPackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -0700236 s := *p.BoolSlice()
237 if len(s) == 0 {
238 return b, nil
239 }
Damien Neil316febd2020-02-09 12:26:50 -0800240 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -0700241 n := 0
242 for _, v := range s {
243 n += wire.SizeVarint(wire.EncodeBool(v))
244 }
245 b = wire.AppendVarint(b, uint64(n))
246 for _, v := range s {
247 b = wire.AppendVarint(b, wire.EncodeBool(v))
248 }
249 return b, nil
250}
251
252var coderBoolPackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -0700253 size: sizeBoolPackedSlice,
254 marshal: appendBoolPackedSlice,
255 unmarshal: consumeBoolSlice,
Damien Neile8e88752020-02-11 11:25:16 -0800256 merge: mergeBoolSlice,
Damien Neilc37adef2019-04-01 13:49:56 -0700257}
258
Damien Neil68b81c32019-08-22 11:41:32 -0700259// sizeBoolValue returns the size of wire encoding a bool value as a Bool.
260func sizeBoolValue(v protoreflect.Value, tagsize int, _ marshalOptions) int {
261 return tagsize + wire.SizeVarint(wire.EncodeBool(v.Bool()))
Damien Neilc37adef2019-04-01 13:49:56 -0700262}
263
Damien Neil68b81c32019-08-22 11:41:32 -0700264// appendBoolValue encodes a bool value as a Bool.
265func appendBoolValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -0700266 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -0700267 b = wire.AppendVarint(b, wire.EncodeBool(v.Bool()))
Damien Neilc37adef2019-04-01 13:49:56 -0700268 return b, nil
269}
270
Damien Neil68b81c32019-08-22 11:41:32 -0700271// consumeBoolValue decodes a bool value as a Bool.
Damien Neilf0831e82020-01-21 14:25:12 -0800272func consumeBoolValue(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -0700273 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800274 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -0700275 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800276 var v uint64
277 var n int
278 if len(b) >= 1 && b[0] < 0x80 {
279 v = uint64(b[0])
280 n = 1
281 } else if len(b) >= 2 && b[1] < 128 {
282 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
283 n = 2
284 } else {
285 v, n = wire.ConsumeVarint(b)
286 }
Damien Neile91877d2019-06-27 10:54:42 -0700287 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800288 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700289 }
Damien Neilf0831e82020-01-21 14:25:12 -0800290 out.n = n
291 return protoreflect.ValueOfBool(wire.DecodeBool(v)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700292}
293
Damien Neil68b81c32019-08-22 11:41:32 -0700294var coderBoolValue = valueCoderFuncs{
295 size: sizeBoolValue,
296 marshal: appendBoolValue,
297 unmarshal: consumeBoolValue,
Damien Neile8e88752020-02-11 11:25:16 -0800298 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -0700299}
300
Damien Neil68b81c32019-08-22 11:41:32 -0700301// sizeBoolSliceValue returns the size of wire encoding a []bool value as a repeated Bool.
302func sizeBoolSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
303 list := listv.List()
304 for i, llen := 0, list.Len(); i < llen; i++ {
305 v := list.Get(i)
306 size += tagsize + wire.SizeVarint(wire.EncodeBool(v.Bool()))
Damien Neilc37adef2019-04-01 13:49:56 -0700307 }
308 return size
309}
310
Damien Neil68b81c32019-08-22 11:41:32 -0700311// appendBoolSliceValue encodes a []bool value as a repeated Bool.
312func appendBoolSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
313 list := listv.List()
314 for i, llen := 0, list.Len(); i < llen; i++ {
315 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -0700316 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -0700317 b = wire.AppendVarint(b, wire.EncodeBool(v.Bool()))
Damien Neilc37adef2019-04-01 13:49:56 -0700318 }
319 return b, nil
320}
321
Damien Neil68b81c32019-08-22 11:41:32 -0700322// consumeBoolSliceValue wire decodes a []bool value as a repeated Bool.
Damien Neilf0831e82020-01-21 14:25:12 -0800323func consumeBoolSliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -0700324 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -0700325 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -0800326 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -0700327 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800328 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700329 }
330 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -0800331 var v uint64
332 var n int
333 if len(b) >= 1 && b[0] < 0x80 {
334 v = uint64(b[0])
335 n = 1
336 } else if len(b) >= 2 && b[1] < 128 {
337 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
338 n = 2
339 } else {
340 v, n = wire.ConsumeVarint(b)
341 }
Damien Neile91877d2019-06-27 10:54:42 -0700342 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800343 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700344 }
Damien Neil68b81c32019-08-22 11:41:32 -0700345 list.Append(protoreflect.ValueOfBool(wire.DecodeBool(v)))
Damien Neile91877d2019-06-27 10:54:42 -0700346 b = b[n:]
347 }
Damien Neilf0831e82020-01-21 14:25:12 -0800348 out.n = n
349 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700350 }
351 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800352 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -0700353 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800354 var v uint64
355 var n int
356 if len(b) >= 1 && b[0] < 0x80 {
357 v = uint64(b[0])
358 n = 1
359 } else if len(b) >= 2 && b[1] < 128 {
360 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
361 n = 2
362 } else {
363 v, n = wire.ConsumeVarint(b)
364 }
Damien Neile91877d2019-06-27 10:54:42 -0700365 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800366 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700367 }
Damien Neil68b81c32019-08-22 11:41:32 -0700368 list.Append(protoreflect.ValueOfBool(wire.DecodeBool(v)))
Damien Neilf0831e82020-01-21 14:25:12 -0800369 out.n = n
370 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700371}
372
Damien Neil68b81c32019-08-22 11:41:32 -0700373var coderBoolSliceValue = valueCoderFuncs{
374 size: sizeBoolSliceValue,
375 marshal: appendBoolSliceValue,
376 unmarshal: consumeBoolSliceValue,
Damien Neile8e88752020-02-11 11:25:16 -0800377 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -0700378}
379
Damien Neil68b81c32019-08-22 11:41:32 -0700380// sizeBoolPackedSliceValue returns the size of wire encoding a []bool value as a packed repeated Bool.
381func sizeBoolPackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
382 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -0800383 llen := list.Len()
384 if llen == 0 {
385 return 0
386 }
Damien Neil7492a092019-07-10 15:23:29 -0700387 n := 0
Damien Neil2c0824b2019-12-20 12:21:25 -0800388 for i, llen := 0, llen; i < llen; i++ {
Damien Neil68b81c32019-08-22 11:41:32 -0700389 v := list.Get(i)
390 n += wire.SizeVarint(wire.EncodeBool(v.Bool()))
Damien Neil7492a092019-07-10 15:23:29 -0700391 }
392 return tagsize + wire.SizeBytes(n)
393}
394
Damien Neil68b81c32019-08-22 11:41:32 -0700395// appendBoolPackedSliceValue encodes a []bool value as a packed repeated Bool.
396func appendBoolPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
397 list := listv.List()
398 llen := list.Len()
399 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -0700400 return b, nil
401 }
402 b = wire.AppendVarint(b, wiretag)
403 n := 0
Damien Neil68b81c32019-08-22 11:41:32 -0700404 for i := 0; i < llen; i++ {
405 v := list.Get(i)
406 n += wire.SizeVarint(wire.EncodeBool(v.Bool()))
Damien Neil7492a092019-07-10 15:23:29 -0700407 }
408 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -0700409 for i := 0; i < llen; i++ {
410 v := list.Get(i)
411 b = wire.AppendVarint(b, wire.EncodeBool(v.Bool()))
Damien Neil7492a092019-07-10 15:23:29 -0700412 }
413 return b, nil
414}
415
Damien Neil68b81c32019-08-22 11:41:32 -0700416var coderBoolPackedSliceValue = valueCoderFuncs{
417 size: sizeBoolPackedSliceValue,
418 marshal: appendBoolPackedSliceValue,
419 unmarshal: consumeBoolSliceValue,
Damien Neile8e88752020-02-11 11:25:16 -0800420 merge: mergeListValue,
Damien Neil68b81c32019-08-22 11:41:32 -0700421}
422
423// sizeEnumValue returns the size of wire encoding a value as a Enum.
424func sizeEnumValue(v protoreflect.Value, tagsize int, _ marshalOptions) int {
425 return tagsize + wire.SizeVarint(uint64(v.Enum()))
426}
427
428// appendEnumValue encodes a value as a Enum.
429func appendEnumValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
430 b = wire.AppendVarint(b, wiretag)
431 b = wire.AppendVarint(b, uint64(v.Enum()))
432 return b, nil
433}
434
435// consumeEnumValue decodes a value as a Enum.
Damien Neilf0831e82020-01-21 14:25:12 -0800436func consumeEnumValue(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -0700437 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800438 return protoreflect.Value{}, out, errUnknown
Damien Neil68b81c32019-08-22 11:41:32 -0700439 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800440 var v uint64
441 var n int
442 if len(b) >= 1 && b[0] < 0x80 {
443 v = uint64(b[0])
444 n = 1
445 } else if len(b) >= 2 && b[1] < 128 {
446 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
447 n = 2
448 } else {
449 v, n = wire.ConsumeVarint(b)
450 }
Damien Neil68b81c32019-08-22 11:41:32 -0700451 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800452 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neil68b81c32019-08-22 11:41:32 -0700453 }
Damien Neilf0831e82020-01-21 14:25:12 -0800454 out.n = n
455 return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), out, nil
Damien Neil68b81c32019-08-22 11:41:32 -0700456}
457
458var coderEnumValue = valueCoderFuncs{
459 size: sizeEnumValue,
460 marshal: appendEnumValue,
461 unmarshal: consumeEnumValue,
Damien Neile8e88752020-02-11 11:25:16 -0800462 merge: mergeScalarValue,
Damien Neil68b81c32019-08-22 11:41:32 -0700463}
464
465// sizeEnumSliceValue returns the size of wire encoding a [] value as a repeated Enum.
466func sizeEnumSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
467 list := listv.List()
468 for i, llen := 0, list.Len(); i < llen; i++ {
469 v := list.Get(i)
470 size += tagsize + wire.SizeVarint(uint64(v.Enum()))
471 }
472 return size
473}
474
475// appendEnumSliceValue encodes a [] value as a repeated Enum.
476func appendEnumSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
477 list := listv.List()
478 for i, llen := 0, list.Len(); i < llen; i++ {
479 v := list.Get(i)
480 b = wire.AppendVarint(b, wiretag)
481 b = wire.AppendVarint(b, uint64(v.Enum()))
482 }
483 return b, nil
484}
485
486// consumeEnumSliceValue wire decodes a [] value as a repeated Enum.
Damien Neilf0831e82020-01-21 14:25:12 -0800487func consumeEnumSliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -0700488 list := listv.List()
489 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -0800490 b, n := wire.ConsumeBytes(b)
Damien Neil68b81c32019-08-22 11:41:32 -0700491 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800492 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neil68b81c32019-08-22 11:41:32 -0700493 }
494 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -0800495 var v uint64
496 var n int
497 if len(b) >= 1 && b[0] < 0x80 {
498 v = uint64(b[0])
499 n = 1
500 } else if len(b) >= 2 && b[1] < 128 {
501 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
502 n = 2
503 } else {
504 v, n = wire.ConsumeVarint(b)
505 }
Damien Neil68b81c32019-08-22 11:41:32 -0700506 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800507 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neil68b81c32019-08-22 11:41:32 -0700508 }
509 list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
510 b = b[n:]
511 }
Damien Neilf0831e82020-01-21 14:25:12 -0800512 out.n = n
513 return listv, out, nil
Damien Neil68b81c32019-08-22 11:41:32 -0700514 }
515 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800516 return protoreflect.Value{}, out, errUnknown
Damien Neil68b81c32019-08-22 11:41:32 -0700517 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800518 var v uint64
519 var n int
520 if len(b) >= 1 && b[0] < 0x80 {
521 v = uint64(b[0])
522 n = 1
523 } else if len(b) >= 2 && b[1] < 128 {
524 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
525 n = 2
526 } else {
527 v, n = wire.ConsumeVarint(b)
528 }
Damien Neil68b81c32019-08-22 11:41:32 -0700529 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800530 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neil68b81c32019-08-22 11:41:32 -0700531 }
532 list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
Damien Neilf0831e82020-01-21 14:25:12 -0800533 out.n = n
534 return listv, out, nil
Damien Neil68b81c32019-08-22 11:41:32 -0700535}
536
537var coderEnumSliceValue = valueCoderFuncs{
538 size: sizeEnumSliceValue,
539 marshal: appendEnumSliceValue,
540 unmarshal: consumeEnumSliceValue,
Damien Neile8e88752020-02-11 11:25:16 -0800541 merge: mergeListValue,
Damien Neil68b81c32019-08-22 11:41:32 -0700542}
543
544// sizeEnumPackedSliceValue returns the size of wire encoding a [] value as a packed repeated Enum.
545func sizeEnumPackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
546 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -0800547 llen := list.Len()
548 if llen == 0 {
549 return 0
550 }
Damien Neil68b81c32019-08-22 11:41:32 -0700551 n := 0
Damien Neil2c0824b2019-12-20 12:21:25 -0800552 for i, llen := 0, llen; i < llen; i++ {
Damien Neil68b81c32019-08-22 11:41:32 -0700553 v := list.Get(i)
554 n += wire.SizeVarint(uint64(v.Enum()))
555 }
556 return tagsize + wire.SizeBytes(n)
557}
558
559// appendEnumPackedSliceValue encodes a [] value as a packed repeated Enum.
560func appendEnumPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
561 list := listv.List()
562 llen := list.Len()
563 if llen == 0 {
564 return b, nil
565 }
566 b = wire.AppendVarint(b, wiretag)
567 n := 0
568 for i := 0; i < llen; i++ {
569 v := list.Get(i)
570 n += wire.SizeVarint(uint64(v.Enum()))
571 }
572 b = wire.AppendVarint(b, uint64(n))
573 for i := 0; i < llen; i++ {
574 v := list.Get(i)
575 b = wire.AppendVarint(b, uint64(v.Enum()))
576 }
577 return b, nil
578}
579
580var coderEnumPackedSliceValue = valueCoderFuncs{
581 size: sizeEnumPackedSliceValue,
582 marshal: appendEnumPackedSliceValue,
583 unmarshal: consumeEnumSliceValue,
Damien Neile8e88752020-02-11 11:25:16 -0800584 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -0700585}
586
Damien Neilc37adef2019-04-01 13:49:56 -0700587// sizeInt32 returns the size of wire encoding a int32 pointer as a Int32.
Damien Neil316febd2020-02-09 12:26:50 -0800588func sizeInt32(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -0700589 v := *p.Int32()
Damien Neil316febd2020-02-09 12:26:50 -0800590 return f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -0700591}
592
593// appendInt32 wire encodes a int32 pointer as a Int32.
Damien Neil316febd2020-02-09 12:26:50 -0800594func appendInt32(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -0700595 v := *p.Int32()
Damien Neil316febd2020-02-09 12:26:50 -0800596 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -0700597 b = wire.AppendVarint(b, uint64(v))
598 return b, nil
599}
600
Damien Neile91877d2019-06-27 10:54:42 -0700601// consumeInt32 wire decodes a int32 pointer as a Int32.
Damien Neil316febd2020-02-09 12:26:50 -0800602func consumeInt32(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -0700603 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800604 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -0700605 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800606 var v uint64
607 var n int
608 if len(b) >= 1 && b[0] < 0x80 {
609 v = uint64(b[0])
610 n = 1
611 } else if len(b) >= 2 && b[1] < 128 {
612 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
613 n = 2
614 } else {
615 v, n = wire.ConsumeVarint(b)
616 }
Damien Neile91877d2019-06-27 10:54:42 -0700617 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800618 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700619 }
620 *p.Int32() = int32(v)
Damien Neilf0831e82020-01-21 14:25:12 -0800621 out.n = n
622 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700623}
624
Damien Neilc37adef2019-04-01 13:49:56 -0700625var coderInt32 = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -0700626 size: sizeInt32,
627 marshal: appendInt32,
628 unmarshal: consumeInt32,
Damien Neile8e88752020-02-11 11:25:16 -0800629 merge: mergeInt32,
Damien Neilc37adef2019-04-01 13:49:56 -0700630}
631
Joe Tsaic51e2e02019-07-13 00:44:41 -0700632// sizeInt32NoZero returns the size of wire encoding a int32 pointer as a Int32.
Damien Neilc37adef2019-04-01 13:49:56 -0700633// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -0800634func sizeInt32NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -0700635 v := *p.Int32()
636 if v == 0 {
637 return 0
638 }
Damien Neil316febd2020-02-09 12:26:50 -0800639 return f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -0700640}
641
Joe Tsaic51e2e02019-07-13 00:44:41 -0700642// appendInt32NoZero wire encodes a int32 pointer as a Int32.
Damien Neilc37adef2019-04-01 13:49:56 -0700643// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -0800644func appendInt32NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -0700645 v := *p.Int32()
646 if v == 0 {
647 return b, nil
648 }
Damien Neil316febd2020-02-09 12:26:50 -0800649 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -0700650 b = wire.AppendVarint(b, uint64(v))
651 return b, nil
652}
653
654var coderInt32NoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -0700655 size: sizeInt32NoZero,
656 marshal: appendInt32NoZero,
657 unmarshal: consumeInt32,
Damien Neile8e88752020-02-11 11:25:16 -0800658 merge: mergeInt32NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -0700659}
660
661// sizeInt32Ptr returns the size of wire encoding a *int32 pointer as a Int32.
662// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -0800663func sizeInt32Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -0700664 v := **p.Int32Ptr()
Damien Neil316febd2020-02-09 12:26:50 -0800665 return f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -0700666}
667
Damien Neile91877d2019-06-27 10:54:42 -0700668// appendInt32Ptr wire encodes a *int32 pointer as a Int32.
Damien Neilc37adef2019-04-01 13:49:56 -0700669// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -0800670func appendInt32Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -0700671 v := **p.Int32Ptr()
Damien Neil316febd2020-02-09 12:26:50 -0800672 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -0700673 b = wire.AppendVarint(b, uint64(v))
674 return b, nil
675}
676
Damien Neile91877d2019-06-27 10:54:42 -0700677// consumeInt32Ptr wire decodes a *int32 pointer as a Int32.
Damien Neil316febd2020-02-09 12:26:50 -0800678func consumeInt32Ptr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -0700679 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800680 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -0700681 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800682 var v uint64
683 var n int
684 if len(b) >= 1 && b[0] < 0x80 {
685 v = uint64(b[0])
686 n = 1
687 } else if len(b) >= 2 && b[1] < 128 {
688 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
689 n = 2
690 } else {
691 v, n = wire.ConsumeVarint(b)
692 }
Damien Neile91877d2019-06-27 10:54:42 -0700693 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800694 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700695 }
696 vp := p.Int32Ptr()
697 if *vp == nil {
698 *vp = new(int32)
699 }
700 **vp = int32(v)
Damien Neilf0831e82020-01-21 14:25:12 -0800701 out.n = n
702 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700703}
704
Damien Neilc37adef2019-04-01 13:49:56 -0700705var coderInt32Ptr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -0700706 size: sizeInt32Ptr,
707 marshal: appendInt32Ptr,
708 unmarshal: consumeInt32Ptr,
Damien Neile8e88752020-02-11 11:25:16 -0800709 merge: mergeInt32Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -0700710}
711
712// sizeInt32Slice returns the size of wire encoding a []int32 pointer as a repeated Int32.
Damien Neil316febd2020-02-09 12:26:50 -0800713func sizeInt32Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -0700714 s := *p.Int32Slice()
715 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -0800716 size += f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -0700717 }
718 return size
719}
720
721// appendInt32Slice encodes a []int32 pointer as a repeated Int32.
Damien Neil316febd2020-02-09 12:26:50 -0800722func appendInt32Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -0700723 s := *p.Int32Slice()
724 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -0800725 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -0700726 b = wire.AppendVarint(b, uint64(v))
727 }
728 return b, nil
729}
730
Damien Neile91877d2019-06-27 10:54:42 -0700731// consumeInt32Slice wire decodes a []int32 pointer as a repeated Int32.
Damien Neil316febd2020-02-09 12:26:50 -0800732func consumeInt32Slice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -0700733 sp := p.Int32Slice()
734 if wtyp == wire.BytesType {
735 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -0800736 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -0700737 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800738 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700739 }
740 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -0800741 var v uint64
742 var n int
743 if len(b) >= 1 && b[0] < 0x80 {
744 v = uint64(b[0])
745 n = 1
746 } else if len(b) >= 2 && b[1] < 128 {
747 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
748 n = 2
749 } else {
750 v, n = wire.ConsumeVarint(b)
751 }
Damien Neile91877d2019-06-27 10:54:42 -0700752 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800753 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700754 }
755 s = append(s, int32(v))
756 b = b[n:]
757 }
758 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -0800759 out.n = n
760 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700761 }
762 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800763 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -0700764 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800765 var v uint64
766 var n int
767 if len(b) >= 1 && b[0] < 0x80 {
768 v = uint64(b[0])
769 n = 1
770 } else if len(b) >= 2 && b[1] < 128 {
771 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
772 n = 2
773 } else {
774 v, n = wire.ConsumeVarint(b)
775 }
Damien Neile91877d2019-06-27 10:54:42 -0700776 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800777 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700778 }
779 *sp = append(*sp, int32(v))
Damien Neilf0831e82020-01-21 14:25:12 -0800780 out.n = n
781 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700782}
783
Damien Neilc37adef2019-04-01 13:49:56 -0700784var coderInt32Slice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -0700785 size: sizeInt32Slice,
786 marshal: appendInt32Slice,
787 unmarshal: consumeInt32Slice,
Damien Neile8e88752020-02-11 11:25:16 -0800788 merge: mergeInt32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -0700789}
790
791// sizeInt32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Int32.
Damien Neil316febd2020-02-09 12:26:50 -0800792func sizeInt32PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -0700793 s := *p.Int32Slice()
794 if len(s) == 0 {
795 return 0
796 }
797 n := 0
798 for _, v := range s {
799 n += wire.SizeVarint(uint64(v))
800 }
Damien Neil316febd2020-02-09 12:26:50 -0800801 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -0700802}
803
804// appendInt32PackedSlice encodes a []int32 pointer as a packed repeated Int32.
Damien Neil316febd2020-02-09 12:26:50 -0800805func appendInt32PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -0700806 s := *p.Int32Slice()
807 if len(s) == 0 {
808 return b, nil
809 }
Damien Neil316febd2020-02-09 12:26:50 -0800810 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -0700811 n := 0
812 for _, v := range s {
813 n += wire.SizeVarint(uint64(v))
814 }
815 b = wire.AppendVarint(b, uint64(n))
816 for _, v := range s {
817 b = wire.AppendVarint(b, uint64(v))
818 }
819 return b, nil
820}
821
822var coderInt32PackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -0700823 size: sizeInt32PackedSlice,
824 marshal: appendInt32PackedSlice,
825 unmarshal: consumeInt32Slice,
Damien Neile8e88752020-02-11 11:25:16 -0800826 merge: mergeInt32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -0700827}
828
Damien Neil68b81c32019-08-22 11:41:32 -0700829// sizeInt32Value returns the size of wire encoding a int32 value as a Int32.
830func sizeInt32Value(v protoreflect.Value, tagsize int, _ marshalOptions) int {
831 return tagsize + wire.SizeVarint(uint64(int32(v.Int())))
Damien Neilc37adef2019-04-01 13:49:56 -0700832}
833
Damien Neil68b81c32019-08-22 11:41:32 -0700834// appendInt32Value encodes a int32 value as a Int32.
835func appendInt32Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -0700836 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -0700837 b = wire.AppendVarint(b, uint64(int32(v.Int())))
Damien Neilc37adef2019-04-01 13:49:56 -0700838 return b, nil
839}
840
Damien Neil68b81c32019-08-22 11:41:32 -0700841// consumeInt32Value decodes a int32 value as a Int32.
Damien Neilf0831e82020-01-21 14:25:12 -0800842func consumeInt32Value(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -0700843 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800844 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -0700845 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800846 var v uint64
847 var n int
848 if len(b) >= 1 && b[0] < 0x80 {
849 v = uint64(b[0])
850 n = 1
851 } else if len(b) >= 2 && b[1] < 128 {
852 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
853 n = 2
854 } else {
855 v, n = wire.ConsumeVarint(b)
856 }
Damien Neile91877d2019-06-27 10:54:42 -0700857 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800858 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700859 }
Damien Neilf0831e82020-01-21 14:25:12 -0800860 out.n = n
861 return protoreflect.ValueOfInt32(int32(v)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700862}
863
Damien Neil68b81c32019-08-22 11:41:32 -0700864var coderInt32Value = valueCoderFuncs{
865 size: sizeInt32Value,
866 marshal: appendInt32Value,
867 unmarshal: consumeInt32Value,
Damien Neile8e88752020-02-11 11:25:16 -0800868 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -0700869}
870
Damien Neil68b81c32019-08-22 11:41:32 -0700871// sizeInt32SliceValue returns the size of wire encoding a []int32 value as a repeated Int32.
872func sizeInt32SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
873 list := listv.List()
874 for i, llen := 0, list.Len(); i < llen; i++ {
875 v := list.Get(i)
876 size += tagsize + wire.SizeVarint(uint64(int32(v.Int())))
Damien Neilc37adef2019-04-01 13:49:56 -0700877 }
878 return size
879}
880
Damien Neil68b81c32019-08-22 11:41:32 -0700881// appendInt32SliceValue encodes a []int32 value as a repeated Int32.
882func appendInt32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
883 list := listv.List()
884 for i, llen := 0, list.Len(); i < llen; i++ {
885 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -0700886 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -0700887 b = wire.AppendVarint(b, uint64(int32(v.Int())))
Damien Neilc37adef2019-04-01 13:49:56 -0700888 }
889 return b, nil
890}
891
Damien Neil68b81c32019-08-22 11:41:32 -0700892// consumeInt32SliceValue wire decodes a []int32 value as a repeated Int32.
Damien Neilf0831e82020-01-21 14:25:12 -0800893func consumeInt32SliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -0700894 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -0700895 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -0800896 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -0700897 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800898 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700899 }
900 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -0800901 var v uint64
902 var n int
903 if len(b) >= 1 && b[0] < 0x80 {
904 v = uint64(b[0])
905 n = 1
906 } else if len(b) >= 2 && b[1] < 128 {
907 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
908 n = 2
909 } else {
910 v, n = wire.ConsumeVarint(b)
911 }
Damien Neile91877d2019-06-27 10:54:42 -0700912 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800913 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700914 }
Damien Neil68b81c32019-08-22 11:41:32 -0700915 list.Append(protoreflect.ValueOfInt32(int32(v)))
Damien Neile91877d2019-06-27 10:54:42 -0700916 b = b[n:]
917 }
Damien Neilf0831e82020-01-21 14:25:12 -0800918 out.n = n
919 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700920 }
921 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -0800922 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -0700923 }
Damien Neiladbbc8e2020-01-24 17:01:14 -0800924 var v uint64
925 var n int
926 if len(b) >= 1 && b[0] < 0x80 {
927 v = uint64(b[0])
928 n = 1
929 } else if len(b) >= 2 && b[1] < 128 {
930 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
931 n = 2
932 } else {
933 v, n = wire.ConsumeVarint(b)
934 }
Damien Neile91877d2019-06-27 10:54:42 -0700935 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -0800936 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -0700937 }
Damien Neil68b81c32019-08-22 11:41:32 -0700938 list.Append(protoreflect.ValueOfInt32(int32(v)))
Damien Neilf0831e82020-01-21 14:25:12 -0800939 out.n = n
940 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -0700941}
942
Damien Neil68b81c32019-08-22 11:41:32 -0700943var coderInt32SliceValue = valueCoderFuncs{
944 size: sizeInt32SliceValue,
945 marshal: appendInt32SliceValue,
946 unmarshal: consumeInt32SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -0800947 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -0700948}
949
Damien Neil68b81c32019-08-22 11:41:32 -0700950// sizeInt32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Int32.
951func sizeInt32PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
952 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -0800953 llen := list.Len()
954 if llen == 0 {
955 return 0
956 }
Damien Neil7492a092019-07-10 15:23:29 -0700957 n := 0
Damien Neil2c0824b2019-12-20 12:21:25 -0800958 for i, llen := 0, llen; i < llen; i++ {
Damien Neil68b81c32019-08-22 11:41:32 -0700959 v := list.Get(i)
960 n += wire.SizeVarint(uint64(int32(v.Int())))
Damien Neil7492a092019-07-10 15:23:29 -0700961 }
962 return tagsize + wire.SizeBytes(n)
963}
964
Damien Neil68b81c32019-08-22 11:41:32 -0700965// appendInt32PackedSliceValue encodes a []int32 value as a packed repeated Int32.
966func appendInt32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
967 list := listv.List()
968 llen := list.Len()
969 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -0700970 return b, nil
971 }
972 b = wire.AppendVarint(b, wiretag)
973 n := 0
Damien Neil68b81c32019-08-22 11:41:32 -0700974 for i := 0; i < llen; i++ {
975 v := list.Get(i)
976 n += wire.SizeVarint(uint64(int32(v.Int())))
Damien Neil7492a092019-07-10 15:23:29 -0700977 }
978 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -0700979 for i := 0; i < llen; i++ {
980 v := list.Get(i)
981 b = wire.AppendVarint(b, uint64(int32(v.Int())))
Damien Neil7492a092019-07-10 15:23:29 -0700982 }
983 return b, nil
984}
985
Damien Neil68b81c32019-08-22 11:41:32 -0700986var coderInt32PackedSliceValue = valueCoderFuncs{
987 size: sizeInt32PackedSliceValue,
988 marshal: appendInt32PackedSliceValue,
989 unmarshal: consumeInt32SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -0800990 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -0700991}
992
Damien Neilc37adef2019-04-01 13:49:56 -0700993// sizeSint32 returns the size of wire encoding a int32 pointer as a Sint32.
Damien Neil316febd2020-02-09 12:26:50 -0800994func sizeSint32(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -0700995 v := *p.Int32()
Damien Neil316febd2020-02-09 12:26:50 -0800996 return f.tagsize + wire.SizeVarint(wire.EncodeZigZag(int64(v)))
Damien Neilc37adef2019-04-01 13:49:56 -0700997}
998
999// appendSint32 wire encodes a int32 pointer as a Sint32.
Damien Neil316febd2020-02-09 12:26:50 -08001000func appendSint32(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001001 v := *p.Int32()
Damien Neil316febd2020-02-09 12:26:50 -08001002 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001003 b = wire.AppendVarint(b, wire.EncodeZigZag(int64(v)))
1004 return b, nil
1005}
1006
Damien Neile91877d2019-06-27 10:54:42 -07001007// consumeSint32 wire decodes a int32 pointer as a Sint32.
Damien Neil316febd2020-02-09 12:26:50 -08001008func consumeSint32(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001009 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001010 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001011 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001012 var v uint64
1013 var n int
1014 if len(b) >= 1 && b[0] < 0x80 {
1015 v = uint64(b[0])
1016 n = 1
1017 } else if len(b) >= 2 && b[1] < 128 {
1018 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1019 n = 2
1020 } else {
1021 v, n = wire.ConsumeVarint(b)
1022 }
Damien Neile91877d2019-06-27 10:54:42 -07001023 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001024 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001025 }
1026 *p.Int32() = int32(wire.DecodeZigZag(v & math.MaxUint32))
Damien Neilf0831e82020-01-21 14:25:12 -08001027 out.n = n
1028 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001029}
1030
Damien Neilc37adef2019-04-01 13:49:56 -07001031var coderSint32 = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001032 size: sizeSint32,
1033 marshal: appendSint32,
1034 unmarshal: consumeSint32,
Damien Neile8e88752020-02-11 11:25:16 -08001035 merge: mergeInt32,
Damien Neilc37adef2019-04-01 13:49:56 -07001036}
1037
Joe Tsaic51e2e02019-07-13 00:44:41 -07001038// sizeSint32NoZero returns the size of wire encoding a int32 pointer as a Sint32.
Damien Neilc37adef2019-04-01 13:49:56 -07001039// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08001040func sizeSint32NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001041 v := *p.Int32()
1042 if v == 0 {
1043 return 0
1044 }
Damien Neil316febd2020-02-09 12:26:50 -08001045 return f.tagsize + wire.SizeVarint(wire.EncodeZigZag(int64(v)))
Damien Neilc37adef2019-04-01 13:49:56 -07001046}
1047
Joe Tsaic51e2e02019-07-13 00:44:41 -07001048// appendSint32NoZero wire encodes a int32 pointer as a Sint32.
Damien Neilc37adef2019-04-01 13:49:56 -07001049// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08001050func appendSint32NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001051 v := *p.Int32()
1052 if v == 0 {
1053 return b, nil
1054 }
Damien Neil316febd2020-02-09 12:26:50 -08001055 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001056 b = wire.AppendVarint(b, wire.EncodeZigZag(int64(v)))
1057 return b, nil
1058}
1059
1060var coderSint32NoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001061 size: sizeSint32NoZero,
1062 marshal: appendSint32NoZero,
1063 unmarshal: consumeSint32,
Damien Neile8e88752020-02-11 11:25:16 -08001064 merge: mergeInt32NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07001065}
1066
1067// sizeSint32Ptr returns the size of wire encoding a *int32 pointer as a Sint32.
1068// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08001069func sizeSint32Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001070 v := **p.Int32Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08001071 return f.tagsize + wire.SizeVarint(wire.EncodeZigZag(int64(v)))
Damien Neilc37adef2019-04-01 13:49:56 -07001072}
1073
Damien Neile91877d2019-06-27 10:54:42 -07001074// appendSint32Ptr wire encodes a *int32 pointer as a Sint32.
Damien Neilc37adef2019-04-01 13:49:56 -07001075// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08001076func appendSint32Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001077 v := **p.Int32Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08001078 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001079 b = wire.AppendVarint(b, wire.EncodeZigZag(int64(v)))
1080 return b, nil
1081}
1082
Damien Neile91877d2019-06-27 10:54:42 -07001083// consumeSint32Ptr wire decodes a *int32 pointer as a Sint32.
Damien Neil316febd2020-02-09 12:26:50 -08001084func consumeSint32Ptr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001085 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001086 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001087 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001088 var v uint64
1089 var n int
1090 if len(b) >= 1 && b[0] < 0x80 {
1091 v = uint64(b[0])
1092 n = 1
1093 } else if len(b) >= 2 && b[1] < 128 {
1094 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1095 n = 2
1096 } else {
1097 v, n = wire.ConsumeVarint(b)
1098 }
Damien Neile91877d2019-06-27 10:54:42 -07001099 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001100 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001101 }
1102 vp := p.Int32Ptr()
1103 if *vp == nil {
1104 *vp = new(int32)
1105 }
1106 **vp = int32(wire.DecodeZigZag(v & math.MaxUint32))
Damien Neilf0831e82020-01-21 14:25:12 -08001107 out.n = n
1108 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001109}
1110
Damien Neilc37adef2019-04-01 13:49:56 -07001111var coderSint32Ptr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001112 size: sizeSint32Ptr,
1113 marshal: appendSint32Ptr,
1114 unmarshal: consumeSint32Ptr,
Damien Neile8e88752020-02-11 11:25:16 -08001115 merge: mergeInt32Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07001116}
1117
1118// sizeSint32Slice returns the size of wire encoding a []int32 pointer as a repeated Sint32.
Damien Neil316febd2020-02-09 12:26:50 -08001119func sizeSint32Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001120 s := *p.Int32Slice()
1121 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08001122 size += f.tagsize + wire.SizeVarint(wire.EncodeZigZag(int64(v)))
Damien Neilc37adef2019-04-01 13:49:56 -07001123 }
1124 return size
1125}
1126
1127// appendSint32Slice encodes a []int32 pointer as a repeated Sint32.
Damien Neil316febd2020-02-09 12:26:50 -08001128func appendSint32Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001129 s := *p.Int32Slice()
1130 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08001131 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001132 b = wire.AppendVarint(b, wire.EncodeZigZag(int64(v)))
1133 }
1134 return b, nil
1135}
1136
Damien Neile91877d2019-06-27 10:54:42 -07001137// consumeSint32Slice wire decodes a []int32 pointer as a repeated Sint32.
Damien Neil316febd2020-02-09 12:26:50 -08001138func consumeSint32Slice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001139 sp := p.Int32Slice()
1140 if wtyp == wire.BytesType {
1141 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08001142 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07001143 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001144 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001145 }
1146 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -08001147 var v uint64
1148 var n int
1149 if len(b) >= 1 && b[0] < 0x80 {
1150 v = uint64(b[0])
1151 n = 1
1152 } else if len(b) >= 2 && b[1] < 128 {
1153 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1154 n = 2
1155 } else {
1156 v, n = wire.ConsumeVarint(b)
1157 }
Damien Neile91877d2019-06-27 10:54:42 -07001158 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001159 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001160 }
1161 s = append(s, int32(wire.DecodeZigZag(v&math.MaxUint32)))
1162 b = b[n:]
1163 }
1164 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08001165 out.n = n
1166 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001167 }
1168 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001169 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001170 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001171 var v uint64
1172 var n int
1173 if len(b) >= 1 && b[0] < 0x80 {
1174 v = uint64(b[0])
1175 n = 1
1176 } else if len(b) >= 2 && b[1] < 128 {
1177 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1178 n = 2
1179 } else {
1180 v, n = wire.ConsumeVarint(b)
1181 }
Damien Neile91877d2019-06-27 10:54:42 -07001182 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001183 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001184 }
1185 *sp = append(*sp, int32(wire.DecodeZigZag(v&math.MaxUint32)))
Damien Neilf0831e82020-01-21 14:25:12 -08001186 out.n = n
1187 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001188}
1189
Damien Neilc37adef2019-04-01 13:49:56 -07001190var coderSint32Slice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001191 size: sizeSint32Slice,
1192 marshal: appendSint32Slice,
1193 unmarshal: consumeSint32Slice,
Damien Neile8e88752020-02-11 11:25:16 -08001194 merge: mergeInt32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07001195}
1196
1197// sizeSint32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sint32.
Damien Neil316febd2020-02-09 12:26:50 -08001198func sizeSint32PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001199 s := *p.Int32Slice()
1200 if len(s) == 0 {
1201 return 0
1202 }
1203 n := 0
1204 for _, v := range s {
1205 n += wire.SizeVarint(wire.EncodeZigZag(int64(v)))
1206 }
Damien Neil316febd2020-02-09 12:26:50 -08001207 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07001208}
1209
1210// appendSint32PackedSlice encodes a []int32 pointer as a packed repeated Sint32.
Damien Neil316febd2020-02-09 12:26:50 -08001211func appendSint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001212 s := *p.Int32Slice()
1213 if len(s) == 0 {
1214 return b, nil
1215 }
Damien Neil316febd2020-02-09 12:26:50 -08001216 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001217 n := 0
1218 for _, v := range s {
1219 n += wire.SizeVarint(wire.EncodeZigZag(int64(v)))
1220 }
1221 b = wire.AppendVarint(b, uint64(n))
1222 for _, v := range s {
1223 b = wire.AppendVarint(b, wire.EncodeZigZag(int64(v)))
1224 }
1225 return b, nil
1226}
1227
1228var coderSint32PackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001229 size: sizeSint32PackedSlice,
1230 marshal: appendSint32PackedSlice,
1231 unmarshal: consumeSint32Slice,
Damien Neile8e88752020-02-11 11:25:16 -08001232 merge: mergeInt32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07001233}
1234
Damien Neil68b81c32019-08-22 11:41:32 -07001235// sizeSint32Value returns the size of wire encoding a int32 value as a Sint32.
1236func sizeSint32Value(v protoreflect.Value, tagsize int, _ marshalOptions) int {
1237 return tagsize + wire.SizeVarint(wire.EncodeZigZag(int64(int32(v.Int()))))
Damien Neilc37adef2019-04-01 13:49:56 -07001238}
1239
Damien Neil68b81c32019-08-22 11:41:32 -07001240// appendSint32Value encodes a int32 value as a Sint32.
1241func appendSint32Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001242 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07001243 b = wire.AppendVarint(b, wire.EncodeZigZag(int64(int32(v.Int()))))
Damien Neilc37adef2019-04-01 13:49:56 -07001244 return b, nil
1245}
1246
Damien Neil68b81c32019-08-22 11:41:32 -07001247// consumeSint32Value decodes a int32 value as a Sint32.
Damien Neilf0831e82020-01-21 14:25:12 -08001248func consumeSint32Value(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001249 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001250 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001251 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001252 var v uint64
1253 var n int
1254 if len(b) >= 1 && b[0] < 0x80 {
1255 v = uint64(b[0])
1256 n = 1
1257 } else if len(b) >= 2 && b[1] < 128 {
1258 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1259 n = 2
1260 } else {
1261 v, n = wire.ConsumeVarint(b)
1262 }
Damien Neile91877d2019-06-27 10:54:42 -07001263 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001264 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001265 }
Damien Neilf0831e82020-01-21 14:25:12 -08001266 out.n = n
1267 return protoreflect.ValueOfInt32(int32(wire.DecodeZigZag(v & math.MaxUint32))), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001268}
1269
Damien Neil68b81c32019-08-22 11:41:32 -07001270var coderSint32Value = valueCoderFuncs{
1271 size: sizeSint32Value,
1272 marshal: appendSint32Value,
1273 unmarshal: consumeSint32Value,
Damien Neile8e88752020-02-11 11:25:16 -08001274 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07001275}
1276
Damien Neil68b81c32019-08-22 11:41:32 -07001277// sizeSint32SliceValue returns the size of wire encoding a []int32 value as a repeated Sint32.
1278func sizeSint32SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
1279 list := listv.List()
1280 for i, llen := 0, list.Len(); i < llen; i++ {
1281 v := list.Get(i)
1282 size += tagsize + wire.SizeVarint(wire.EncodeZigZag(int64(int32(v.Int()))))
Damien Neilc37adef2019-04-01 13:49:56 -07001283 }
1284 return size
1285}
1286
Damien Neil68b81c32019-08-22 11:41:32 -07001287// appendSint32SliceValue encodes a []int32 value as a repeated Sint32.
1288func appendSint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
1289 list := listv.List()
1290 for i, llen := 0, list.Len(); i < llen; i++ {
1291 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07001292 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07001293 b = wire.AppendVarint(b, wire.EncodeZigZag(int64(int32(v.Int()))))
Damien Neilc37adef2019-04-01 13:49:56 -07001294 }
1295 return b, nil
1296}
1297
Damien Neil68b81c32019-08-22 11:41:32 -07001298// consumeSint32SliceValue wire decodes a []int32 value as a repeated Sint32.
Damien Neilf0831e82020-01-21 14:25:12 -08001299func consumeSint32SliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07001300 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07001301 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08001302 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07001303 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001304 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001305 }
1306 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -08001307 var v uint64
1308 var n int
1309 if len(b) >= 1 && b[0] < 0x80 {
1310 v = uint64(b[0])
1311 n = 1
1312 } else if len(b) >= 2 && b[1] < 128 {
1313 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1314 n = 2
1315 } else {
1316 v, n = wire.ConsumeVarint(b)
1317 }
Damien Neile91877d2019-06-27 10:54:42 -07001318 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001319 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001320 }
Damien Neil68b81c32019-08-22 11:41:32 -07001321 list.Append(protoreflect.ValueOfInt32(int32(wire.DecodeZigZag(v & math.MaxUint32))))
Damien Neile91877d2019-06-27 10:54:42 -07001322 b = b[n:]
1323 }
Damien Neilf0831e82020-01-21 14:25:12 -08001324 out.n = n
1325 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001326 }
1327 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001328 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001329 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001330 var v uint64
1331 var n int
1332 if len(b) >= 1 && b[0] < 0x80 {
1333 v = uint64(b[0])
1334 n = 1
1335 } else if len(b) >= 2 && b[1] < 128 {
1336 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1337 n = 2
1338 } else {
1339 v, n = wire.ConsumeVarint(b)
1340 }
Damien Neile91877d2019-06-27 10:54:42 -07001341 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001342 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001343 }
Damien Neil68b81c32019-08-22 11:41:32 -07001344 list.Append(protoreflect.ValueOfInt32(int32(wire.DecodeZigZag(v & math.MaxUint32))))
Damien Neilf0831e82020-01-21 14:25:12 -08001345 out.n = n
1346 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001347}
1348
Damien Neil68b81c32019-08-22 11:41:32 -07001349var coderSint32SliceValue = valueCoderFuncs{
1350 size: sizeSint32SliceValue,
1351 marshal: appendSint32SliceValue,
1352 unmarshal: consumeSint32SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08001353 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07001354}
1355
Damien Neil68b81c32019-08-22 11:41:32 -07001356// sizeSint32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sint32.
1357func sizeSint32PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
1358 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08001359 llen := list.Len()
1360 if llen == 0 {
1361 return 0
1362 }
Damien Neil7492a092019-07-10 15:23:29 -07001363 n := 0
Damien Neil2c0824b2019-12-20 12:21:25 -08001364 for i, llen := 0, llen; i < llen; i++ {
Damien Neil68b81c32019-08-22 11:41:32 -07001365 v := list.Get(i)
1366 n += wire.SizeVarint(wire.EncodeZigZag(int64(int32(v.Int()))))
Damien Neil7492a092019-07-10 15:23:29 -07001367 }
1368 return tagsize + wire.SizeBytes(n)
1369}
1370
Damien Neil68b81c32019-08-22 11:41:32 -07001371// appendSint32PackedSliceValue encodes a []int32 value as a packed repeated Sint32.
1372func appendSint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
1373 list := listv.List()
1374 llen := list.Len()
1375 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07001376 return b, nil
1377 }
1378 b = wire.AppendVarint(b, wiretag)
1379 n := 0
Damien Neil68b81c32019-08-22 11:41:32 -07001380 for i := 0; i < llen; i++ {
1381 v := list.Get(i)
1382 n += wire.SizeVarint(wire.EncodeZigZag(int64(int32(v.Int()))))
Damien Neil7492a092019-07-10 15:23:29 -07001383 }
1384 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07001385 for i := 0; i < llen; i++ {
1386 v := list.Get(i)
1387 b = wire.AppendVarint(b, wire.EncodeZigZag(int64(int32(v.Int()))))
Damien Neil7492a092019-07-10 15:23:29 -07001388 }
1389 return b, nil
1390}
1391
Damien Neil68b81c32019-08-22 11:41:32 -07001392var coderSint32PackedSliceValue = valueCoderFuncs{
1393 size: sizeSint32PackedSliceValue,
1394 marshal: appendSint32PackedSliceValue,
1395 unmarshal: consumeSint32SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08001396 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07001397}
1398
Damien Neilc37adef2019-04-01 13:49:56 -07001399// sizeUint32 returns the size of wire encoding a uint32 pointer as a Uint32.
Damien Neil316febd2020-02-09 12:26:50 -08001400func sizeUint32(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001401 v := *p.Uint32()
Damien Neil316febd2020-02-09 12:26:50 -08001402 return f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -07001403}
1404
1405// appendUint32 wire encodes a uint32 pointer as a Uint32.
Damien Neil316febd2020-02-09 12:26:50 -08001406func appendUint32(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001407 v := *p.Uint32()
Damien Neil316febd2020-02-09 12:26:50 -08001408 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001409 b = wire.AppendVarint(b, uint64(v))
1410 return b, nil
1411}
1412
Damien Neile91877d2019-06-27 10:54:42 -07001413// consumeUint32 wire decodes a uint32 pointer as a Uint32.
Damien Neil316febd2020-02-09 12:26:50 -08001414func consumeUint32(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001415 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001416 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001417 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001418 var v uint64
1419 var n int
1420 if len(b) >= 1 && b[0] < 0x80 {
1421 v = uint64(b[0])
1422 n = 1
1423 } else if len(b) >= 2 && b[1] < 128 {
1424 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1425 n = 2
1426 } else {
1427 v, n = wire.ConsumeVarint(b)
1428 }
Damien Neile91877d2019-06-27 10:54:42 -07001429 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001430 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001431 }
1432 *p.Uint32() = uint32(v)
Damien Neilf0831e82020-01-21 14:25:12 -08001433 out.n = n
1434 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001435}
1436
Damien Neilc37adef2019-04-01 13:49:56 -07001437var coderUint32 = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001438 size: sizeUint32,
1439 marshal: appendUint32,
1440 unmarshal: consumeUint32,
Damien Neile8e88752020-02-11 11:25:16 -08001441 merge: mergeUint32,
Damien Neilc37adef2019-04-01 13:49:56 -07001442}
1443
Joe Tsaic51e2e02019-07-13 00:44:41 -07001444// sizeUint32NoZero returns the size of wire encoding a uint32 pointer as a Uint32.
Damien Neilc37adef2019-04-01 13:49:56 -07001445// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08001446func sizeUint32NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001447 v := *p.Uint32()
1448 if v == 0 {
1449 return 0
1450 }
Damien Neil316febd2020-02-09 12:26:50 -08001451 return f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -07001452}
1453
Joe Tsaic51e2e02019-07-13 00:44:41 -07001454// appendUint32NoZero wire encodes a uint32 pointer as a Uint32.
Damien Neilc37adef2019-04-01 13:49:56 -07001455// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08001456func appendUint32NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001457 v := *p.Uint32()
1458 if v == 0 {
1459 return b, nil
1460 }
Damien Neil316febd2020-02-09 12:26:50 -08001461 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001462 b = wire.AppendVarint(b, uint64(v))
1463 return b, nil
1464}
1465
1466var coderUint32NoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001467 size: sizeUint32NoZero,
1468 marshal: appendUint32NoZero,
1469 unmarshal: consumeUint32,
Damien Neile8e88752020-02-11 11:25:16 -08001470 merge: mergeUint32NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07001471}
1472
1473// sizeUint32Ptr returns the size of wire encoding a *uint32 pointer as a Uint32.
1474// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08001475func sizeUint32Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001476 v := **p.Uint32Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08001477 return f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -07001478}
1479
Damien Neile91877d2019-06-27 10:54:42 -07001480// appendUint32Ptr wire encodes a *uint32 pointer as a Uint32.
Damien Neilc37adef2019-04-01 13:49:56 -07001481// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08001482func appendUint32Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001483 v := **p.Uint32Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08001484 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001485 b = wire.AppendVarint(b, uint64(v))
1486 return b, nil
1487}
1488
Damien Neile91877d2019-06-27 10:54:42 -07001489// consumeUint32Ptr wire decodes a *uint32 pointer as a Uint32.
Damien Neil316febd2020-02-09 12:26:50 -08001490func consumeUint32Ptr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001491 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001492 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001493 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001494 var v uint64
1495 var n int
1496 if len(b) >= 1 && b[0] < 0x80 {
1497 v = uint64(b[0])
1498 n = 1
1499 } else if len(b) >= 2 && b[1] < 128 {
1500 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1501 n = 2
1502 } else {
1503 v, n = wire.ConsumeVarint(b)
1504 }
Damien Neile91877d2019-06-27 10:54:42 -07001505 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001506 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001507 }
1508 vp := p.Uint32Ptr()
1509 if *vp == nil {
1510 *vp = new(uint32)
1511 }
1512 **vp = uint32(v)
Damien Neilf0831e82020-01-21 14:25:12 -08001513 out.n = n
1514 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001515}
1516
Damien Neilc37adef2019-04-01 13:49:56 -07001517var coderUint32Ptr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001518 size: sizeUint32Ptr,
1519 marshal: appendUint32Ptr,
1520 unmarshal: consumeUint32Ptr,
Damien Neile8e88752020-02-11 11:25:16 -08001521 merge: mergeUint32Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07001522}
1523
1524// sizeUint32Slice returns the size of wire encoding a []uint32 pointer as a repeated Uint32.
Damien Neil316febd2020-02-09 12:26:50 -08001525func sizeUint32Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001526 s := *p.Uint32Slice()
1527 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08001528 size += f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -07001529 }
1530 return size
1531}
1532
1533// appendUint32Slice encodes a []uint32 pointer as a repeated Uint32.
Damien Neil316febd2020-02-09 12:26:50 -08001534func appendUint32Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001535 s := *p.Uint32Slice()
1536 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08001537 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001538 b = wire.AppendVarint(b, uint64(v))
1539 }
1540 return b, nil
1541}
1542
Damien Neile91877d2019-06-27 10:54:42 -07001543// consumeUint32Slice wire decodes a []uint32 pointer as a repeated Uint32.
Damien Neil316febd2020-02-09 12:26:50 -08001544func consumeUint32Slice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001545 sp := p.Uint32Slice()
1546 if wtyp == wire.BytesType {
1547 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08001548 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07001549 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001550 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001551 }
1552 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -08001553 var v uint64
1554 var n int
1555 if len(b) >= 1 && b[0] < 0x80 {
1556 v = uint64(b[0])
1557 n = 1
1558 } else if len(b) >= 2 && b[1] < 128 {
1559 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1560 n = 2
1561 } else {
1562 v, n = wire.ConsumeVarint(b)
1563 }
Damien Neile91877d2019-06-27 10:54:42 -07001564 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001565 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001566 }
1567 s = append(s, uint32(v))
1568 b = b[n:]
1569 }
1570 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08001571 out.n = n
1572 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001573 }
1574 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001575 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001576 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001577 var v uint64
1578 var n int
1579 if len(b) >= 1 && b[0] < 0x80 {
1580 v = uint64(b[0])
1581 n = 1
1582 } else if len(b) >= 2 && b[1] < 128 {
1583 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1584 n = 2
1585 } else {
1586 v, n = wire.ConsumeVarint(b)
1587 }
Damien Neile91877d2019-06-27 10:54:42 -07001588 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001589 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001590 }
1591 *sp = append(*sp, uint32(v))
Damien Neilf0831e82020-01-21 14:25:12 -08001592 out.n = n
1593 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001594}
1595
Damien Neilc37adef2019-04-01 13:49:56 -07001596var coderUint32Slice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001597 size: sizeUint32Slice,
1598 marshal: appendUint32Slice,
1599 unmarshal: consumeUint32Slice,
Damien Neile8e88752020-02-11 11:25:16 -08001600 merge: mergeUint32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07001601}
1602
1603// sizeUint32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Uint32.
Damien Neil316febd2020-02-09 12:26:50 -08001604func sizeUint32PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001605 s := *p.Uint32Slice()
1606 if len(s) == 0 {
1607 return 0
1608 }
1609 n := 0
1610 for _, v := range s {
1611 n += wire.SizeVarint(uint64(v))
1612 }
Damien Neil316febd2020-02-09 12:26:50 -08001613 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07001614}
1615
1616// appendUint32PackedSlice encodes a []uint32 pointer as a packed repeated Uint32.
Damien Neil316febd2020-02-09 12:26:50 -08001617func appendUint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001618 s := *p.Uint32Slice()
1619 if len(s) == 0 {
1620 return b, nil
1621 }
Damien Neil316febd2020-02-09 12:26:50 -08001622 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001623 n := 0
1624 for _, v := range s {
1625 n += wire.SizeVarint(uint64(v))
1626 }
1627 b = wire.AppendVarint(b, uint64(n))
1628 for _, v := range s {
1629 b = wire.AppendVarint(b, uint64(v))
1630 }
1631 return b, nil
1632}
1633
1634var coderUint32PackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001635 size: sizeUint32PackedSlice,
1636 marshal: appendUint32PackedSlice,
1637 unmarshal: consumeUint32Slice,
Damien Neile8e88752020-02-11 11:25:16 -08001638 merge: mergeUint32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07001639}
1640
Damien Neil68b81c32019-08-22 11:41:32 -07001641// sizeUint32Value returns the size of wire encoding a uint32 value as a Uint32.
1642func sizeUint32Value(v protoreflect.Value, tagsize int, _ marshalOptions) int {
1643 return tagsize + wire.SizeVarint(uint64(uint32(v.Uint())))
Damien Neilc37adef2019-04-01 13:49:56 -07001644}
1645
Damien Neil68b81c32019-08-22 11:41:32 -07001646// appendUint32Value encodes a uint32 value as a Uint32.
1647func appendUint32Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001648 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07001649 b = wire.AppendVarint(b, uint64(uint32(v.Uint())))
Damien Neilc37adef2019-04-01 13:49:56 -07001650 return b, nil
1651}
1652
Damien Neil68b81c32019-08-22 11:41:32 -07001653// consumeUint32Value decodes a uint32 value as a Uint32.
Damien Neilf0831e82020-01-21 14:25:12 -08001654func consumeUint32Value(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001655 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001656 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001657 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001658 var v uint64
1659 var n int
1660 if len(b) >= 1 && b[0] < 0x80 {
1661 v = uint64(b[0])
1662 n = 1
1663 } else if len(b) >= 2 && b[1] < 128 {
1664 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1665 n = 2
1666 } else {
1667 v, n = wire.ConsumeVarint(b)
1668 }
Damien Neile91877d2019-06-27 10:54:42 -07001669 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001670 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001671 }
Damien Neilf0831e82020-01-21 14:25:12 -08001672 out.n = n
1673 return protoreflect.ValueOfUint32(uint32(v)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001674}
1675
Damien Neil68b81c32019-08-22 11:41:32 -07001676var coderUint32Value = valueCoderFuncs{
1677 size: sizeUint32Value,
1678 marshal: appendUint32Value,
1679 unmarshal: consumeUint32Value,
Damien Neile8e88752020-02-11 11:25:16 -08001680 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07001681}
1682
Damien Neil68b81c32019-08-22 11:41:32 -07001683// sizeUint32SliceValue returns the size of wire encoding a []uint32 value as a repeated Uint32.
1684func sizeUint32SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
1685 list := listv.List()
1686 for i, llen := 0, list.Len(); i < llen; i++ {
1687 v := list.Get(i)
1688 size += tagsize + wire.SizeVarint(uint64(uint32(v.Uint())))
Damien Neilc37adef2019-04-01 13:49:56 -07001689 }
1690 return size
1691}
1692
Damien Neil68b81c32019-08-22 11:41:32 -07001693// appendUint32SliceValue encodes a []uint32 value as a repeated Uint32.
1694func appendUint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
1695 list := listv.List()
1696 for i, llen := 0, list.Len(); i < llen; i++ {
1697 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07001698 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07001699 b = wire.AppendVarint(b, uint64(uint32(v.Uint())))
Damien Neilc37adef2019-04-01 13:49:56 -07001700 }
1701 return b, nil
1702}
1703
Damien Neil68b81c32019-08-22 11:41:32 -07001704// consumeUint32SliceValue wire decodes a []uint32 value as a repeated Uint32.
Damien Neilf0831e82020-01-21 14:25:12 -08001705func consumeUint32SliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07001706 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07001707 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08001708 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07001709 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001710 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001711 }
1712 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -08001713 var v uint64
1714 var n int
1715 if len(b) >= 1 && b[0] < 0x80 {
1716 v = uint64(b[0])
1717 n = 1
1718 } else if len(b) >= 2 && b[1] < 128 {
1719 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1720 n = 2
1721 } else {
1722 v, n = wire.ConsumeVarint(b)
1723 }
Damien Neile91877d2019-06-27 10:54:42 -07001724 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001725 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001726 }
Damien Neil68b81c32019-08-22 11:41:32 -07001727 list.Append(protoreflect.ValueOfUint32(uint32(v)))
Damien Neile91877d2019-06-27 10:54:42 -07001728 b = b[n:]
1729 }
Damien Neilf0831e82020-01-21 14:25:12 -08001730 out.n = n
1731 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001732 }
1733 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001734 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001735 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001736 var v uint64
1737 var n int
1738 if len(b) >= 1 && b[0] < 0x80 {
1739 v = uint64(b[0])
1740 n = 1
1741 } else if len(b) >= 2 && b[1] < 128 {
1742 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1743 n = 2
1744 } else {
1745 v, n = wire.ConsumeVarint(b)
1746 }
Damien Neile91877d2019-06-27 10:54:42 -07001747 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001748 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001749 }
Damien Neil68b81c32019-08-22 11:41:32 -07001750 list.Append(protoreflect.ValueOfUint32(uint32(v)))
Damien Neilf0831e82020-01-21 14:25:12 -08001751 out.n = n
1752 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001753}
1754
Damien Neil68b81c32019-08-22 11:41:32 -07001755var coderUint32SliceValue = valueCoderFuncs{
1756 size: sizeUint32SliceValue,
1757 marshal: appendUint32SliceValue,
1758 unmarshal: consumeUint32SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08001759 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07001760}
1761
Damien Neil68b81c32019-08-22 11:41:32 -07001762// sizeUint32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Uint32.
1763func sizeUint32PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
1764 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08001765 llen := list.Len()
1766 if llen == 0 {
1767 return 0
1768 }
Damien Neil7492a092019-07-10 15:23:29 -07001769 n := 0
Damien Neil2c0824b2019-12-20 12:21:25 -08001770 for i, llen := 0, llen; i < llen; i++ {
Damien Neil68b81c32019-08-22 11:41:32 -07001771 v := list.Get(i)
1772 n += wire.SizeVarint(uint64(uint32(v.Uint())))
Damien Neil7492a092019-07-10 15:23:29 -07001773 }
1774 return tagsize + wire.SizeBytes(n)
1775}
1776
Damien Neil68b81c32019-08-22 11:41:32 -07001777// appendUint32PackedSliceValue encodes a []uint32 value as a packed repeated Uint32.
1778func appendUint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
1779 list := listv.List()
1780 llen := list.Len()
1781 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07001782 return b, nil
1783 }
1784 b = wire.AppendVarint(b, wiretag)
1785 n := 0
Damien Neil68b81c32019-08-22 11:41:32 -07001786 for i := 0; i < llen; i++ {
1787 v := list.Get(i)
1788 n += wire.SizeVarint(uint64(uint32(v.Uint())))
Damien Neil7492a092019-07-10 15:23:29 -07001789 }
1790 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07001791 for i := 0; i < llen; i++ {
1792 v := list.Get(i)
1793 b = wire.AppendVarint(b, uint64(uint32(v.Uint())))
Damien Neil7492a092019-07-10 15:23:29 -07001794 }
1795 return b, nil
1796}
1797
Damien Neil68b81c32019-08-22 11:41:32 -07001798var coderUint32PackedSliceValue = valueCoderFuncs{
1799 size: sizeUint32PackedSliceValue,
1800 marshal: appendUint32PackedSliceValue,
1801 unmarshal: consumeUint32SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08001802 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07001803}
1804
Damien Neilc37adef2019-04-01 13:49:56 -07001805// sizeInt64 returns the size of wire encoding a int64 pointer as a Int64.
Damien Neil316febd2020-02-09 12:26:50 -08001806func sizeInt64(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001807 v := *p.Int64()
Damien Neil316febd2020-02-09 12:26:50 -08001808 return f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -07001809}
1810
1811// appendInt64 wire encodes a int64 pointer as a Int64.
Damien Neil316febd2020-02-09 12:26:50 -08001812func appendInt64(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001813 v := *p.Int64()
Damien Neil316febd2020-02-09 12:26:50 -08001814 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001815 b = wire.AppendVarint(b, uint64(v))
1816 return b, nil
1817}
1818
Damien Neile91877d2019-06-27 10:54:42 -07001819// consumeInt64 wire decodes a int64 pointer as a Int64.
Damien Neil316febd2020-02-09 12:26:50 -08001820func consumeInt64(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001821 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001822 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001823 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001824 var v uint64
1825 var n int
1826 if len(b) >= 1 && b[0] < 0x80 {
1827 v = uint64(b[0])
1828 n = 1
1829 } else if len(b) >= 2 && b[1] < 128 {
1830 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1831 n = 2
1832 } else {
1833 v, n = wire.ConsumeVarint(b)
1834 }
Damien Neile91877d2019-06-27 10:54:42 -07001835 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001836 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001837 }
1838 *p.Int64() = int64(v)
Damien Neilf0831e82020-01-21 14:25:12 -08001839 out.n = n
1840 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001841}
1842
Damien Neilc37adef2019-04-01 13:49:56 -07001843var coderInt64 = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001844 size: sizeInt64,
1845 marshal: appendInt64,
1846 unmarshal: consumeInt64,
Damien Neile8e88752020-02-11 11:25:16 -08001847 merge: mergeInt64,
Damien Neilc37adef2019-04-01 13:49:56 -07001848}
1849
Joe Tsaic51e2e02019-07-13 00:44:41 -07001850// sizeInt64NoZero returns the size of wire encoding a int64 pointer as a Int64.
Damien Neilc37adef2019-04-01 13:49:56 -07001851// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08001852func sizeInt64NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001853 v := *p.Int64()
1854 if v == 0 {
1855 return 0
1856 }
Damien Neil316febd2020-02-09 12:26:50 -08001857 return f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -07001858}
1859
Joe Tsaic51e2e02019-07-13 00:44:41 -07001860// appendInt64NoZero wire encodes a int64 pointer as a Int64.
Damien Neilc37adef2019-04-01 13:49:56 -07001861// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08001862func appendInt64NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001863 v := *p.Int64()
1864 if v == 0 {
1865 return b, nil
1866 }
Damien Neil316febd2020-02-09 12:26:50 -08001867 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001868 b = wire.AppendVarint(b, uint64(v))
1869 return b, nil
1870}
1871
1872var coderInt64NoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001873 size: sizeInt64NoZero,
1874 marshal: appendInt64NoZero,
1875 unmarshal: consumeInt64,
Damien Neile8e88752020-02-11 11:25:16 -08001876 merge: mergeInt64NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07001877}
1878
1879// sizeInt64Ptr returns the size of wire encoding a *int64 pointer as a Int64.
1880// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08001881func sizeInt64Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001882 v := **p.Int64Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08001883 return f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -07001884}
1885
Damien Neile91877d2019-06-27 10:54:42 -07001886// appendInt64Ptr wire encodes a *int64 pointer as a Int64.
Damien Neilc37adef2019-04-01 13:49:56 -07001887// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08001888func appendInt64Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001889 v := **p.Int64Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08001890 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001891 b = wire.AppendVarint(b, uint64(v))
1892 return b, nil
1893}
1894
Damien Neile91877d2019-06-27 10:54:42 -07001895// consumeInt64Ptr wire decodes a *int64 pointer as a Int64.
Damien Neil316febd2020-02-09 12:26:50 -08001896func consumeInt64Ptr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001897 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001898 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001899 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001900 var v uint64
1901 var n int
1902 if len(b) >= 1 && b[0] < 0x80 {
1903 v = uint64(b[0])
1904 n = 1
1905 } else if len(b) >= 2 && b[1] < 128 {
1906 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1907 n = 2
1908 } else {
1909 v, n = wire.ConsumeVarint(b)
1910 }
Damien Neile91877d2019-06-27 10:54:42 -07001911 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001912 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001913 }
1914 vp := p.Int64Ptr()
1915 if *vp == nil {
1916 *vp = new(int64)
1917 }
1918 **vp = int64(v)
Damien Neilf0831e82020-01-21 14:25:12 -08001919 out.n = n
1920 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001921}
1922
Damien Neilc37adef2019-04-01 13:49:56 -07001923var coderInt64Ptr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07001924 size: sizeInt64Ptr,
1925 marshal: appendInt64Ptr,
1926 unmarshal: consumeInt64Ptr,
Damien Neile8e88752020-02-11 11:25:16 -08001927 merge: mergeInt64Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07001928}
1929
1930// sizeInt64Slice returns the size of wire encoding a []int64 pointer as a repeated Int64.
Damien Neil316febd2020-02-09 12:26:50 -08001931func sizeInt64Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07001932 s := *p.Int64Slice()
1933 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08001934 size += f.tagsize + wire.SizeVarint(uint64(v))
Damien Neilc37adef2019-04-01 13:49:56 -07001935 }
1936 return size
1937}
1938
1939// appendInt64Slice encodes a []int64 pointer as a repeated Int64.
Damien Neil316febd2020-02-09 12:26:50 -08001940func appendInt64Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07001941 s := *p.Int64Slice()
1942 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08001943 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07001944 b = wire.AppendVarint(b, uint64(v))
1945 }
1946 return b, nil
1947}
1948
Damien Neile91877d2019-06-27 10:54:42 -07001949// consumeInt64Slice wire decodes a []int64 pointer as a repeated Int64.
Damien Neil316febd2020-02-09 12:26:50 -08001950func consumeInt64Slice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07001951 sp := p.Int64Slice()
1952 if wtyp == wire.BytesType {
1953 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08001954 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07001955 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001956 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001957 }
1958 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -08001959 var v uint64
1960 var n int
1961 if len(b) >= 1 && b[0] < 0x80 {
1962 v = uint64(b[0])
1963 n = 1
1964 } else if len(b) >= 2 && b[1] < 128 {
1965 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1966 n = 2
1967 } else {
1968 v, n = wire.ConsumeVarint(b)
1969 }
Damien Neile91877d2019-06-27 10:54:42 -07001970 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001971 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001972 }
1973 s = append(s, int64(v))
1974 b = b[n:]
1975 }
1976 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08001977 out.n = n
1978 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07001979 }
1980 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08001981 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07001982 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08001983 var v uint64
1984 var n int
1985 if len(b) >= 1 && b[0] < 0x80 {
1986 v = uint64(b[0])
1987 n = 1
1988 } else if len(b) >= 2 && b[1] < 128 {
1989 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
1990 n = 2
1991 } else {
1992 v, n = wire.ConsumeVarint(b)
1993 }
Damien Neile91877d2019-06-27 10:54:42 -07001994 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08001995 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07001996 }
1997 *sp = append(*sp, int64(v))
Damien Neilf0831e82020-01-21 14:25:12 -08001998 out.n = n
1999 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002000}
2001
Damien Neilc37adef2019-04-01 13:49:56 -07002002var coderInt64Slice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002003 size: sizeInt64Slice,
2004 marshal: appendInt64Slice,
2005 unmarshal: consumeInt64Slice,
Damien Neile8e88752020-02-11 11:25:16 -08002006 merge: mergeInt64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07002007}
2008
2009// sizeInt64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Int64.
Damien Neil316febd2020-02-09 12:26:50 -08002010func sizeInt64PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002011 s := *p.Int64Slice()
2012 if len(s) == 0 {
2013 return 0
2014 }
2015 n := 0
2016 for _, v := range s {
2017 n += wire.SizeVarint(uint64(v))
2018 }
Damien Neil316febd2020-02-09 12:26:50 -08002019 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07002020}
2021
2022// appendInt64PackedSlice encodes a []int64 pointer as a packed repeated Int64.
Damien Neil316febd2020-02-09 12:26:50 -08002023func appendInt64PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002024 s := *p.Int64Slice()
2025 if len(s) == 0 {
2026 return b, nil
2027 }
Damien Neil316febd2020-02-09 12:26:50 -08002028 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002029 n := 0
2030 for _, v := range s {
2031 n += wire.SizeVarint(uint64(v))
2032 }
2033 b = wire.AppendVarint(b, uint64(n))
2034 for _, v := range s {
2035 b = wire.AppendVarint(b, uint64(v))
2036 }
2037 return b, nil
2038}
2039
2040var coderInt64PackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002041 size: sizeInt64PackedSlice,
2042 marshal: appendInt64PackedSlice,
2043 unmarshal: consumeInt64Slice,
Damien Neile8e88752020-02-11 11:25:16 -08002044 merge: mergeInt64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07002045}
2046
Damien Neil68b81c32019-08-22 11:41:32 -07002047// sizeInt64Value returns the size of wire encoding a int64 value as a Int64.
2048func sizeInt64Value(v protoreflect.Value, tagsize int, _ marshalOptions) int {
2049 return tagsize + wire.SizeVarint(uint64(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07002050}
2051
Damien Neil68b81c32019-08-22 11:41:32 -07002052// appendInt64Value encodes a int64 value as a Int64.
2053func appendInt64Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002054 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07002055 b = wire.AppendVarint(b, uint64(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07002056 return b, nil
2057}
2058
Damien Neil68b81c32019-08-22 11:41:32 -07002059// consumeInt64Value decodes a int64 value as a Int64.
Damien Neilf0831e82020-01-21 14:25:12 -08002060func consumeInt64Value(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07002061 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002062 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002063 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002064 var v uint64
2065 var n int
2066 if len(b) >= 1 && b[0] < 0x80 {
2067 v = uint64(b[0])
2068 n = 1
2069 } else if len(b) >= 2 && b[1] < 128 {
2070 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2071 n = 2
2072 } else {
2073 v, n = wire.ConsumeVarint(b)
2074 }
Damien Neile91877d2019-06-27 10:54:42 -07002075 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002076 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002077 }
Damien Neilf0831e82020-01-21 14:25:12 -08002078 out.n = n
2079 return protoreflect.ValueOfInt64(int64(v)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002080}
2081
Damien Neil68b81c32019-08-22 11:41:32 -07002082var coderInt64Value = valueCoderFuncs{
2083 size: sizeInt64Value,
2084 marshal: appendInt64Value,
2085 unmarshal: consumeInt64Value,
Damien Neile8e88752020-02-11 11:25:16 -08002086 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07002087}
2088
Damien Neil68b81c32019-08-22 11:41:32 -07002089// sizeInt64SliceValue returns the size of wire encoding a []int64 value as a repeated Int64.
2090func sizeInt64SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
2091 list := listv.List()
2092 for i, llen := 0, list.Len(); i < llen; i++ {
2093 v := list.Get(i)
2094 size += tagsize + wire.SizeVarint(uint64(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07002095 }
2096 return size
2097}
2098
Damien Neil68b81c32019-08-22 11:41:32 -07002099// appendInt64SliceValue encodes a []int64 value as a repeated Int64.
2100func appendInt64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
2101 list := listv.List()
2102 for i, llen := 0, list.Len(); i < llen; i++ {
2103 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07002104 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07002105 b = wire.AppendVarint(b, uint64(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07002106 }
2107 return b, nil
2108}
2109
Damien Neil68b81c32019-08-22 11:41:32 -07002110// consumeInt64SliceValue wire decodes a []int64 value as a repeated Int64.
Damien Neilf0831e82020-01-21 14:25:12 -08002111func consumeInt64SliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07002112 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07002113 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08002114 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07002115 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002116 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002117 }
2118 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -08002119 var v uint64
2120 var n int
2121 if len(b) >= 1 && b[0] < 0x80 {
2122 v = uint64(b[0])
2123 n = 1
2124 } else if len(b) >= 2 && b[1] < 128 {
2125 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2126 n = 2
2127 } else {
2128 v, n = wire.ConsumeVarint(b)
2129 }
Damien Neile91877d2019-06-27 10:54:42 -07002130 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002131 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002132 }
Damien Neil68b81c32019-08-22 11:41:32 -07002133 list.Append(protoreflect.ValueOfInt64(int64(v)))
Damien Neile91877d2019-06-27 10:54:42 -07002134 b = b[n:]
2135 }
Damien Neilf0831e82020-01-21 14:25:12 -08002136 out.n = n
2137 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002138 }
2139 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002140 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002141 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002142 var v uint64
2143 var n int
2144 if len(b) >= 1 && b[0] < 0x80 {
2145 v = uint64(b[0])
2146 n = 1
2147 } else if len(b) >= 2 && b[1] < 128 {
2148 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2149 n = 2
2150 } else {
2151 v, n = wire.ConsumeVarint(b)
2152 }
Damien Neile91877d2019-06-27 10:54:42 -07002153 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002154 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002155 }
Damien Neil68b81c32019-08-22 11:41:32 -07002156 list.Append(protoreflect.ValueOfInt64(int64(v)))
Damien Neilf0831e82020-01-21 14:25:12 -08002157 out.n = n
2158 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002159}
2160
Damien Neil68b81c32019-08-22 11:41:32 -07002161var coderInt64SliceValue = valueCoderFuncs{
2162 size: sizeInt64SliceValue,
2163 marshal: appendInt64SliceValue,
2164 unmarshal: consumeInt64SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08002165 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07002166}
2167
Damien Neil68b81c32019-08-22 11:41:32 -07002168// sizeInt64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Int64.
2169func sizeInt64PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
2170 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08002171 llen := list.Len()
2172 if llen == 0 {
2173 return 0
2174 }
Damien Neil7492a092019-07-10 15:23:29 -07002175 n := 0
Damien Neil2c0824b2019-12-20 12:21:25 -08002176 for i, llen := 0, llen; i < llen; i++ {
Damien Neil68b81c32019-08-22 11:41:32 -07002177 v := list.Get(i)
2178 n += wire.SizeVarint(uint64(v.Int()))
Damien Neil7492a092019-07-10 15:23:29 -07002179 }
2180 return tagsize + wire.SizeBytes(n)
2181}
2182
Damien Neil68b81c32019-08-22 11:41:32 -07002183// appendInt64PackedSliceValue encodes a []int64 value as a packed repeated Int64.
2184func appendInt64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
2185 list := listv.List()
2186 llen := list.Len()
2187 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07002188 return b, nil
2189 }
2190 b = wire.AppendVarint(b, wiretag)
2191 n := 0
Damien Neil68b81c32019-08-22 11:41:32 -07002192 for i := 0; i < llen; i++ {
2193 v := list.Get(i)
2194 n += wire.SizeVarint(uint64(v.Int()))
Damien Neil7492a092019-07-10 15:23:29 -07002195 }
2196 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07002197 for i := 0; i < llen; i++ {
2198 v := list.Get(i)
2199 b = wire.AppendVarint(b, uint64(v.Int()))
Damien Neil7492a092019-07-10 15:23:29 -07002200 }
2201 return b, nil
2202}
2203
Damien Neil68b81c32019-08-22 11:41:32 -07002204var coderInt64PackedSliceValue = valueCoderFuncs{
2205 size: sizeInt64PackedSliceValue,
2206 marshal: appendInt64PackedSliceValue,
2207 unmarshal: consumeInt64SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08002208 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07002209}
2210
Damien Neilc37adef2019-04-01 13:49:56 -07002211// sizeSint64 returns the size of wire encoding a int64 pointer as a Sint64.
Damien Neil316febd2020-02-09 12:26:50 -08002212func sizeSint64(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002213 v := *p.Int64()
Damien Neil316febd2020-02-09 12:26:50 -08002214 return f.tagsize + wire.SizeVarint(wire.EncodeZigZag(v))
Damien Neilc37adef2019-04-01 13:49:56 -07002215}
2216
2217// appendSint64 wire encodes a int64 pointer as a Sint64.
Damien Neil316febd2020-02-09 12:26:50 -08002218func appendSint64(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002219 v := *p.Int64()
Damien Neil316febd2020-02-09 12:26:50 -08002220 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002221 b = wire.AppendVarint(b, wire.EncodeZigZag(v))
2222 return b, nil
2223}
2224
Damien Neile91877d2019-06-27 10:54:42 -07002225// consumeSint64 wire decodes a int64 pointer as a Sint64.
Damien Neil316febd2020-02-09 12:26:50 -08002226func consumeSint64(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07002227 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002228 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002229 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002230 var v uint64
2231 var n int
2232 if len(b) >= 1 && b[0] < 0x80 {
2233 v = uint64(b[0])
2234 n = 1
2235 } else if len(b) >= 2 && b[1] < 128 {
2236 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2237 n = 2
2238 } else {
2239 v, n = wire.ConsumeVarint(b)
2240 }
Damien Neile91877d2019-06-27 10:54:42 -07002241 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002242 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002243 }
2244 *p.Int64() = wire.DecodeZigZag(v)
Damien Neilf0831e82020-01-21 14:25:12 -08002245 out.n = n
2246 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002247}
2248
Damien Neilc37adef2019-04-01 13:49:56 -07002249var coderSint64 = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002250 size: sizeSint64,
2251 marshal: appendSint64,
2252 unmarshal: consumeSint64,
Damien Neile8e88752020-02-11 11:25:16 -08002253 merge: mergeInt64,
Damien Neilc37adef2019-04-01 13:49:56 -07002254}
2255
Joe Tsaic51e2e02019-07-13 00:44:41 -07002256// sizeSint64NoZero returns the size of wire encoding a int64 pointer as a Sint64.
Damien Neilc37adef2019-04-01 13:49:56 -07002257// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08002258func sizeSint64NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002259 v := *p.Int64()
2260 if v == 0 {
2261 return 0
2262 }
Damien Neil316febd2020-02-09 12:26:50 -08002263 return f.tagsize + wire.SizeVarint(wire.EncodeZigZag(v))
Damien Neilc37adef2019-04-01 13:49:56 -07002264}
2265
Joe Tsaic51e2e02019-07-13 00:44:41 -07002266// appendSint64NoZero wire encodes a int64 pointer as a Sint64.
Damien Neilc37adef2019-04-01 13:49:56 -07002267// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08002268func appendSint64NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002269 v := *p.Int64()
2270 if v == 0 {
2271 return b, nil
2272 }
Damien Neil316febd2020-02-09 12:26:50 -08002273 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002274 b = wire.AppendVarint(b, wire.EncodeZigZag(v))
2275 return b, nil
2276}
2277
2278var coderSint64NoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002279 size: sizeSint64NoZero,
2280 marshal: appendSint64NoZero,
2281 unmarshal: consumeSint64,
Damien Neile8e88752020-02-11 11:25:16 -08002282 merge: mergeInt64NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07002283}
2284
2285// sizeSint64Ptr returns the size of wire encoding a *int64 pointer as a Sint64.
2286// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08002287func sizeSint64Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002288 v := **p.Int64Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08002289 return f.tagsize + wire.SizeVarint(wire.EncodeZigZag(v))
Damien Neilc37adef2019-04-01 13:49:56 -07002290}
2291
Damien Neile91877d2019-06-27 10:54:42 -07002292// appendSint64Ptr wire encodes a *int64 pointer as a Sint64.
Damien Neilc37adef2019-04-01 13:49:56 -07002293// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08002294func appendSint64Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002295 v := **p.Int64Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08002296 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002297 b = wire.AppendVarint(b, wire.EncodeZigZag(v))
2298 return b, nil
2299}
2300
Damien Neile91877d2019-06-27 10:54:42 -07002301// consumeSint64Ptr wire decodes a *int64 pointer as a Sint64.
Damien Neil316febd2020-02-09 12:26:50 -08002302func consumeSint64Ptr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07002303 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002304 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002305 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002306 var v uint64
2307 var n int
2308 if len(b) >= 1 && b[0] < 0x80 {
2309 v = uint64(b[0])
2310 n = 1
2311 } else if len(b) >= 2 && b[1] < 128 {
2312 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2313 n = 2
2314 } else {
2315 v, n = wire.ConsumeVarint(b)
2316 }
Damien Neile91877d2019-06-27 10:54:42 -07002317 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002318 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002319 }
2320 vp := p.Int64Ptr()
2321 if *vp == nil {
2322 *vp = new(int64)
2323 }
2324 **vp = wire.DecodeZigZag(v)
Damien Neilf0831e82020-01-21 14:25:12 -08002325 out.n = n
2326 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002327}
2328
Damien Neilc37adef2019-04-01 13:49:56 -07002329var coderSint64Ptr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002330 size: sizeSint64Ptr,
2331 marshal: appendSint64Ptr,
2332 unmarshal: consumeSint64Ptr,
Damien Neile8e88752020-02-11 11:25:16 -08002333 merge: mergeInt64Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07002334}
2335
2336// sizeSint64Slice returns the size of wire encoding a []int64 pointer as a repeated Sint64.
Damien Neil316febd2020-02-09 12:26:50 -08002337func sizeSint64Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002338 s := *p.Int64Slice()
2339 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08002340 size += f.tagsize + wire.SizeVarint(wire.EncodeZigZag(v))
Damien Neilc37adef2019-04-01 13:49:56 -07002341 }
2342 return size
2343}
2344
2345// appendSint64Slice encodes a []int64 pointer as a repeated Sint64.
Damien Neil316febd2020-02-09 12:26:50 -08002346func appendSint64Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002347 s := *p.Int64Slice()
2348 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08002349 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002350 b = wire.AppendVarint(b, wire.EncodeZigZag(v))
2351 }
2352 return b, nil
2353}
2354
Damien Neile91877d2019-06-27 10:54:42 -07002355// consumeSint64Slice wire decodes a []int64 pointer as a repeated Sint64.
Damien Neil316febd2020-02-09 12:26:50 -08002356func consumeSint64Slice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07002357 sp := p.Int64Slice()
2358 if wtyp == wire.BytesType {
2359 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08002360 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07002361 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002362 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002363 }
2364 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -08002365 var v uint64
2366 var n int
2367 if len(b) >= 1 && b[0] < 0x80 {
2368 v = uint64(b[0])
2369 n = 1
2370 } else if len(b) >= 2 && b[1] < 128 {
2371 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2372 n = 2
2373 } else {
2374 v, n = wire.ConsumeVarint(b)
2375 }
Damien Neile91877d2019-06-27 10:54:42 -07002376 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002377 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002378 }
2379 s = append(s, wire.DecodeZigZag(v))
2380 b = b[n:]
2381 }
2382 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08002383 out.n = n
2384 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002385 }
2386 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002387 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002388 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002389 var v uint64
2390 var n int
2391 if len(b) >= 1 && b[0] < 0x80 {
2392 v = uint64(b[0])
2393 n = 1
2394 } else if len(b) >= 2 && b[1] < 128 {
2395 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2396 n = 2
2397 } else {
2398 v, n = wire.ConsumeVarint(b)
2399 }
Damien Neile91877d2019-06-27 10:54:42 -07002400 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002401 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002402 }
2403 *sp = append(*sp, wire.DecodeZigZag(v))
Damien Neilf0831e82020-01-21 14:25:12 -08002404 out.n = n
2405 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002406}
2407
Damien Neilc37adef2019-04-01 13:49:56 -07002408var coderSint64Slice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002409 size: sizeSint64Slice,
2410 marshal: appendSint64Slice,
2411 unmarshal: consumeSint64Slice,
Damien Neile8e88752020-02-11 11:25:16 -08002412 merge: mergeInt64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07002413}
2414
2415// sizeSint64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sint64.
Damien Neil316febd2020-02-09 12:26:50 -08002416func sizeSint64PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002417 s := *p.Int64Slice()
2418 if len(s) == 0 {
2419 return 0
2420 }
2421 n := 0
2422 for _, v := range s {
2423 n += wire.SizeVarint(wire.EncodeZigZag(v))
2424 }
Damien Neil316febd2020-02-09 12:26:50 -08002425 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07002426}
2427
2428// appendSint64PackedSlice encodes a []int64 pointer as a packed repeated Sint64.
Damien Neil316febd2020-02-09 12:26:50 -08002429func appendSint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002430 s := *p.Int64Slice()
2431 if len(s) == 0 {
2432 return b, nil
2433 }
Damien Neil316febd2020-02-09 12:26:50 -08002434 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002435 n := 0
2436 for _, v := range s {
2437 n += wire.SizeVarint(wire.EncodeZigZag(v))
2438 }
2439 b = wire.AppendVarint(b, uint64(n))
2440 for _, v := range s {
2441 b = wire.AppendVarint(b, wire.EncodeZigZag(v))
2442 }
2443 return b, nil
2444}
2445
2446var coderSint64PackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002447 size: sizeSint64PackedSlice,
2448 marshal: appendSint64PackedSlice,
2449 unmarshal: consumeSint64Slice,
Damien Neile8e88752020-02-11 11:25:16 -08002450 merge: mergeInt64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07002451}
2452
Damien Neil68b81c32019-08-22 11:41:32 -07002453// sizeSint64Value returns the size of wire encoding a int64 value as a Sint64.
2454func sizeSint64Value(v protoreflect.Value, tagsize int, _ marshalOptions) int {
2455 return tagsize + wire.SizeVarint(wire.EncodeZigZag(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07002456}
2457
Damien Neil68b81c32019-08-22 11:41:32 -07002458// appendSint64Value encodes a int64 value as a Sint64.
2459func appendSint64Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002460 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07002461 b = wire.AppendVarint(b, wire.EncodeZigZag(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07002462 return b, nil
2463}
2464
Damien Neil68b81c32019-08-22 11:41:32 -07002465// consumeSint64Value decodes a int64 value as a Sint64.
Damien Neilf0831e82020-01-21 14:25:12 -08002466func consumeSint64Value(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07002467 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002468 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002469 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002470 var v uint64
2471 var n int
2472 if len(b) >= 1 && b[0] < 0x80 {
2473 v = uint64(b[0])
2474 n = 1
2475 } else if len(b) >= 2 && b[1] < 128 {
2476 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2477 n = 2
2478 } else {
2479 v, n = wire.ConsumeVarint(b)
2480 }
Damien Neile91877d2019-06-27 10:54:42 -07002481 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002482 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002483 }
Damien Neilf0831e82020-01-21 14:25:12 -08002484 out.n = n
2485 return protoreflect.ValueOfInt64(wire.DecodeZigZag(v)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002486}
2487
Damien Neil68b81c32019-08-22 11:41:32 -07002488var coderSint64Value = valueCoderFuncs{
2489 size: sizeSint64Value,
2490 marshal: appendSint64Value,
2491 unmarshal: consumeSint64Value,
Damien Neile8e88752020-02-11 11:25:16 -08002492 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07002493}
2494
Damien Neil68b81c32019-08-22 11:41:32 -07002495// sizeSint64SliceValue returns the size of wire encoding a []int64 value as a repeated Sint64.
2496func sizeSint64SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
2497 list := listv.List()
2498 for i, llen := 0, list.Len(); i < llen; i++ {
2499 v := list.Get(i)
2500 size += tagsize + wire.SizeVarint(wire.EncodeZigZag(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07002501 }
2502 return size
2503}
2504
Damien Neil68b81c32019-08-22 11:41:32 -07002505// appendSint64SliceValue encodes a []int64 value as a repeated Sint64.
2506func appendSint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
2507 list := listv.List()
2508 for i, llen := 0, list.Len(); i < llen; i++ {
2509 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07002510 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07002511 b = wire.AppendVarint(b, wire.EncodeZigZag(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07002512 }
2513 return b, nil
2514}
2515
Damien Neil68b81c32019-08-22 11:41:32 -07002516// consumeSint64SliceValue wire decodes a []int64 value as a repeated Sint64.
Damien Neilf0831e82020-01-21 14:25:12 -08002517func consumeSint64SliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07002518 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07002519 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08002520 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07002521 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002522 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002523 }
2524 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -08002525 var v uint64
2526 var n int
2527 if len(b) >= 1 && b[0] < 0x80 {
2528 v = uint64(b[0])
2529 n = 1
2530 } else if len(b) >= 2 && b[1] < 128 {
2531 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2532 n = 2
2533 } else {
2534 v, n = wire.ConsumeVarint(b)
2535 }
Damien Neile91877d2019-06-27 10:54:42 -07002536 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002537 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002538 }
Damien Neil68b81c32019-08-22 11:41:32 -07002539 list.Append(protoreflect.ValueOfInt64(wire.DecodeZigZag(v)))
Damien Neile91877d2019-06-27 10:54:42 -07002540 b = b[n:]
2541 }
Damien Neilf0831e82020-01-21 14:25:12 -08002542 out.n = n
2543 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002544 }
2545 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002546 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002547 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002548 var v uint64
2549 var n int
2550 if len(b) >= 1 && b[0] < 0x80 {
2551 v = uint64(b[0])
2552 n = 1
2553 } else if len(b) >= 2 && b[1] < 128 {
2554 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2555 n = 2
2556 } else {
2557 v, n = wire.ConsumeVarint(b)
2558 }
Damien Neile91877d2019-06-27 10:54:42 -07002559 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002560 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002561 }
Damien Neil68b81c32019-08-22 11:41:32 -07002562 list.Append(protoreflect.ValueOfInt64(wire.DecodeZigZag(v)))
Damien Neilf0831e82020-01-21 14:25:12 -08002563 out.n = n
2564 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002565}
2566
Damien Neil68b81c32019-08-22 11:41:32 -07002567var coderSint64SliceValue = valueCoderFuncs{
2568 size: sizeSint64SliceValue,
2569 marshal: appendSint64SliceValue,
2570 unmarshal: consumeSint64SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08002571 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07002572}
2573
Damien Neil68b81c32019-08-22 11:41:32 -07002574// sizeSint64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sint64.
2575func sizeSint64PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
2576 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08002577 llen := list.Len()
2578 if llen == 0 {
2579 return 0
2580 }
Damien Neil7492a092019-07-10 15:23:29 -07002581 n := 0
Damien Neil2c0824b2019-12-20 12:21:25 -08002582 for i, llen := 0, llen; i < llen; i++ {
Damien Neil68b81c32019-08-22 11:41:32 -07002583 v := list.Get(i)
2584 n += wire.SizeVarint(wire.EncodeZigZag(v.Int()))
Damien Neil7492a092019-07-10 15:23:29 -07002585 }
2586 return tagsize + wire.SizeBytes(n)
2587}
2588
Damien Neil68b81c32019-08-22 11:41:32 -07002589// appendSint64PackedSliceValue encodes a []int64 value as a packed repeated Sint64.
2590func appendSint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
2591 list := listv.List()
2592 llen := list.Len()
2593 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07002594 return b, nil
2595 }
2596 b = wire.AppendVarint(b, wiretag)
2597 n := 0
Damien Neil68b81c32019-08-22 11:41:32 -07002598 for i := 0; i < llen; i++ {
2599 v := list.Get(i)
2600 n += wire.SizeVarint(wire.EncodeZigZag(v.Int()))
Damien Neil7492a092019-07-10 15:23:29 -07002601 }
2602 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07002603 for i := 0; i < llen; i++ {
2604 v := list.Get(i)
2605 b = wire.AppendVarint(b, wire.EncodeZigZag(v.Int()))
Damien Neil7492a092019-07-10 15:23:29 -07002606 }
2607 return b, nil
2608}
2609
Damien Neil68b81c32019-08-22 11:41:32 -07002610var coderSint64PackedSliceValue = valueCoderFuncs{
2611 size: sizeSint64PackedSliceValue,
2612 marshal: appendSint64PackedSliceValue,
2613 unmarshal: consumeSint64SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08002614 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07002615}
2616
Damien Neilc37adef2019-04-01 13:49:56 -07002617// sizeUint64 returns the size of wire encoding a uint64 pointer as a Uint64.
Damien Neil316febd2020-02-09 12:26:50 -08002618func sizeUint64(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002619 v := *p.Uint64()
Damien Neil316febd2020-02-09 12:26:50 -08002620 return f.tagsize + wire.SizeVarint(v)
Damien Neilc37adef2019-04-01 13:49:56 -07002621}
2622
2623// appendUint64 wire encodes a uint64 pointer as a Uint64.
Damien Neil316febd2020-02-09 12:26:50 -08002624func appendUint64(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002625 v := *p.Uint64()
Damien Neil316febd2020-02-09 12:26:50 -08002626 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002627 b = wire.AppendVarint(b, v)
2628 return b, nil
2629}
2630
Damien Neile91877d2019-06-27 10:54:42 -07002631// consumeUint64 wire decodes a uint64 pointer as a Uint64.
Damien Neil316febd2020-02-09 12:26:50 -08002632func consumeUint64(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07002633 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002634 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002635 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002636 var v uint64
2637 var n int
2638 if len(b) >= 1 && b[0] < 0x80 {
2639 v = uint64(b[0])
2640 n = 1
2641 } else if len(b) >= 2 && b[1] < 128 {
2642 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2643 n = 2
2644 } else {
2645 v, n = wire.ConsumeVarint(b)
2646 }
Damien Neile91877d2019-06-27 10:54:42 -07002647 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002648 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002649 }
2650 *p.Uint64() = v
Damien Neilf0831e82020-01-21 14:25:12 -08002651 out.n = n
2652 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002653}
2654
Damien Neilc37adef2019-04-01 13:49:56 -07002655var coderUint64 = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002656 size: sizeUint64,
2657 marshal: appendUint64,
2658 unmarshal: consumeUint64,
Damien Neile8e88752020-02-11 11:25:16 -08002659 merge: mergeUint64,
Damien Neilc37adef2019-04-01 13:49:56 -07002660}
2661
Joe Tsaic51e2e02019-07-13 00:44:41 -07002662// sizeUint64NoZero returns the size of wire encoding a uint64 pointer as a Uint64.
Damien Neilc37adef2019-04-01 13:49:56 -07002663// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08002664func sizeUint64NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002665 v := *p.Uint64()
2666 if v == 0 {
2667 return 0
2668 }
Damien Neil316febd2020-02-09 12:26:50 -08002669 return f.tagsize + wire.SizeVarint(v)
Damien Neilc37adef2019-04-01 13:49:56 -07002670}
2671
Joe Tsaic51e2e02019-07-13 00:44:41 -07002672// appendUint64NoZero wire encodes a uint64 pointer as a Uint64.
Damien Neilc37adef2019-04-01 13:49:56 -07002673// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08002674func appendUint64NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002675 v := *p.Uint64()
2676 if v == 0 {
2677 return b, nil
2678 }
Damien Neil316febd2020-02-09 12:26:50 -08002679 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002680 b = wire.AppendVarint(b, v)
2681 return b, nil
2682}
2683
2684var coderUint64NoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002685 size: sizeUint64NoZero,
2686 marshal: appendUint64NoZero,
2687 unmarshal: consumeUint64,
Damien Neile8e88752020-02-11 11:25:16 -08002688 merge: mergeUint64NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07002689}
2690
2691// sizeUint64Ptr returns the size of wire encoding a *uint64 pointer as a Uint64.
2692// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08002693func sizeUint64Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002694 v := **p.Uint64Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08002695 return f.tagsize + wire.SizeVarint(v)
Damien Neilc37adef2019-04-01 13:49:56 -07002696}
2697
Damien Neile91877d2019-06-27 10:54:42 -07002698// appendUint64Ptr wire encodes a *uint64 pointer as a Uint64.
Damien Neilc37adef2019-04-01 13:49:56 -07002699// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08002700func appendUint64Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002701 v := **p.Uint64Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08002702 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002703 b = wire.AppendVarint(b, v)
2704 return b, nil
2705}
2706
Damien Neile91877d2019-06-27 10:54:42 -07002707// consumeUint64Ptr wire decodes a *uint64 pointer as a Uint64.
Damien Neil316febd2020-02-09 12:26:50 -08002708func consumeUint64Ptr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07002709 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002710 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002711 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002712 var v uint64
2713 var n int
2714 if len(b) >= 1 && b[0] < 0x80 {
2715 v = uint64(b[0])
2716 n = 1
2717 } else if len(b) >= 2 && b[1] < 128 {
2718 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2719 n = 2
2720 } else {
2721 v, n = wire.ConsumeVarint(b)
2722 }
Damien Neile91877d2019-06-27 10:54:42 -07002723 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002724 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002725 }
2726 vp := p.Uint64Ptr()
2727 if *vp == nil {
2728 *vp = new(uint64)
2729 }
2730 **vp = v
Damien Neilf0831e82020-01-21 14:25:12 -08002731 out.n = n
2732 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002733}
2734
Damien Neilc37adef2019-04-01 13:49:56 -07002735var coderUint64Ptr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002736 size: sizeUint64Ptr,
2737 marshal: appendUint64Ptr,
2738 unmarshal: consumeUint64Ptr,
Damien Neile8e88752020-02-11 11:25:16 -08002739 merge: mergeUint64Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07002740}
2741
2742// sizeUint64Slice returns the size of wire encoding a []uint64 pointer as a repeated Uint64.
Damien Neil316febd2020-02-09 12:26:50 -08002743func sizeUint64Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002744 s := *p.Uint64Slice()
2745 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08002746 size += f.tagsize + wire.SizeVarint(v)
Damien Neilc37adef2019-04-01 13:49:56 -07002747 }
2748 return size
2749}
2750
2751// appendUint64Slice encodes a []uint64 pointer as a repeated Uint64.
Damien Neil316febd2020-02-09 12:26:50 -08002752func appendUint64Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002753 s := *p.Uint64Slice()
2754 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08002755 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002756 b = wire.AppendVarint(b, v)
2757 }
2758 return b, nil
2759}
2760
Damien Neile91877d2019-06-27 10:54:42 -07002761// consumeUint64Slice wire decodes a []uint64 pointer as a repeated Uint64.
Damien Neil316febd2020-02-09 12:26:50 -08002762func consumeUint64Slice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07002763 sp := p.Uint64Slice()
2764 if wtyp == wire.BytesType {
2765 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08002766 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07002767 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002768 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002769 }
2770 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -08002771 var v uint64
2772 var n int
2773 if len(b) >= 1 && b[0] < 0x80 {
2774 v = uint64(b[0])
2775 n = 1
2776 } else if len(b) >= 2 && b[1] < 128 {
2777 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2778 n = 2
2779 } else {
2780 v, n = wire.ConsumeVarint(b)
2781 }
Damien Neile91877d2019-06-27 10:54:42 -07002782 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002783 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002784 }
2785 s = append(s, v)
2786 b = b[n:]
2787 }
2788 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08002789 out.n = n
2790 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002791 }
2792 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002793 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002794 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002795 var v uint64
2796 var n int
2797 if len(b) >= 1 && b[0] < 0x80 {
2798 v = uint64(b[0])
2799 n = 1
2800 } else if len(b) >= 2 && b[1] < 128 {
2801 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2802 n = 2
2803 } else {
2804 v, n = wire.ConsumeVarint(b)
2805 }
Damien Neile91877d2019-06-27 10:54:42 -07002806 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002807 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002808 }
2809 *sp = append(*sp, v)
Damien Neilf0831e82020-01-21 14:25:12 -08002810 out.n = n
2811 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002812}
2813
Damien Neilc37adef2019-04-01 13:49:56 -07002814var coderUint64Slice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002815 size: sizeUint64Slice,
2816 marshal: appendUint64Slice,
2817 unmarshal: consumeUint64Slice,
Damien Neile8e88752020-02-11 11:25:16 -08002818 merge: mergeUint64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07002819}
2820
2821// sizeUint64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Uint64.
Damien Neil316febd2020-02-09 12:26:50 -08002822func sizeUint64PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07002823 s := *p.Uint64Slice()
2824 if len(s) == 0 {
2825 return 0
2826 }
2827 n := 0
2828 for _, v := range s {
2829 n += wire.SizeVarint(v)
2830 }
Damien Neil316febd2020-02-09 12:26:50 -08002831 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07002832}
2833
2834// appendUint64PackedSlice encodes a []uint64 pointer as a packed repeated Uint64.
Damien Neil316febd2020-02-09 12:26:50 -08002835func appendUint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002836 s := *p.Uint64Slice()
2837 if len(s) == 0 {
2838 return b, nil
2839 }
Damien Neil316febd2020-02-09 12:26:50 -08002840 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07002841 n := 0
2842 for _, v := range s {
2843 n += wire.SizeVarint(v)
2844 }
2845 b = wire.AppendVarint(b, uint64(n))
2846 for _, v := range s {
2847 b = wire.AppendVarint(b, v)
2848 }
2849 return b, nil
2850}
2851
2852var coderUint64PackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07002853 size: sizeUint64PackedSlice,
2854 marshal: appendUint64PackedSlice,
2855 unmarshal: consumeUint64Slice,
Damien Neile8e88752020-02-11 11:25:16 -08002856 merge: mergeUint64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07002857}
2858
Damien Neil68b81c32019-08-22 11:41:32 -07002859// sizeUint64Value returns the size of wire encoding a uint64 value as a Uint64.
2860func sizeUint64Value(v protoreflect.Value, tagsize int, _ marshalOptions) int {
2861 return tagsize + wire.SizeVarint(v.Uint())
Damien Neilc37adef2019-04-01 13:49:56 -07002862}
2863
Damien Neil68b81c32019-08-22 11:41:32 -07002864// appendUint64Value encodes a uint64 value as a Uint64.
2865func appendUint64Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07002866 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07002867 b = wire.AppendVarint(b, v.Uint())
Damien Neilc37adef2019-04-01 13:49:56 -07002868 return b, nil
2869}
2870
Damien Neil68b81c32019-08-22 11:41:32 -07002871// consumeUint64Value decodes a uint64 value as a Uint64.
Damien Neilf0831e82020-01-21 14:25:12 -08002872func consumeUint64Value(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07002873 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002874 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002875 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002876 var v uint64
2877 var n int
2878 if len(b) >= 1 && b[0] < 0x80 {
2879 v = uint64(b[0])
2880 n = 1
2881 } else if len(b) >= 2 && b[1] < 128 {
2882 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2883 n = 2
2884 } else {
2885 v, n = wire.ConsumeVarint(b)
2886 }
Damien Neile91877d2019-06-27 10:54:42 -07002887 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002888 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002889 }
Damien Neilf0831e82020-01-21 14:25:12 -08002890 out.n = n
2891 return protoreflect.ValueOfUint64(v), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002892}
2893
Damien Neil68b81c32019-08-22 11:41:32 -07002894var coderUint64Value = valueCoderFuncs{
2895 size: sizeUint64Value,
2896 marshal: appendUint64Value,
2897 unmarshal: consumeUint64Value,
Damien Neile8e88752020-02-11 11:25:16 -08002898 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07002899}
2900
Damien Neil68b81c32019-08-22 11:41:32 -07002901// sizeUint64SliceValue returns the size of wire encoding a []uint64 value as a repeated Uint64.
2902func sizeUint64SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
2903 list := listv.List()
2904 for i, llen := 0, list.Len(); i < llen; i++ {
2905 v := list.Get(i)
2906 size += tagsize + wire.SizeVarint(v.Uint())
Damien Neilc37adef2019-04-01 13:49:56 -07002907 }
2908 return size
2909}
2910
Damien Neil68b81c32019-08-22 11:41:32 -07002911// appendUint64SliceValue encodes a []uint64 value as a repeated Uint64.
2912func appendUint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
2913 list := listv.List()
2914 for i, llen := 0, list.Len(); i < llen; i++ {
2915 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07002916 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07002917 b = wire.AppendVarint(b, v.Uint())
Damien Neilc37adef2019-04-01 13:49:56 -07002918 }
2919 return b, nil
2920}
2921
Damien Neil68b81c32019-08-22 11:41:32 -07002922// consumeUint64SliceValue wire decodes a []uint64 value as a repeated Uint64.
Damien Neilf0831e82020-01-21 14:25:12 -08002923func consumeUint64SliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07002924 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07002925 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08002926 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07002927 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002928 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002929 }
2930 for len(b) > 0 {
Damien Neiladbbc8e2020-01-24 17:01:14 -08002931 var v uint64
2932 var n int
2933 if len(b) >= 1 && b[0] < 0x80 {
2934 v = uint64(b[0])
2935 n = 1
2936 } else if len(b) >= 2 && b[1] < 128 {
2937 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2938 n = 2
2939 } else {
2940 v, n = wire.ConsumeVarint(b)
2941 }
Damien Neile91877d2019-06-27 10:54:42 -07002942 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002943 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002944 }
Damien Neil68b81c32019-08-22 11:41:32 -07002945 list.Append(protoreflect.ValueOfUint64(v))
Damien Neile91877d2019-06-27 10:54:42 -07002946 b = b[n:]
2947 }
Damien Neilf0831e82020-01-21 14:25:12 -08002948 out.n = n
2949 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002950 }
2951 if wtyp != wire.VarintType {
Damien Neilf0831e82020-01-21 14:25:12 -08002952 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07002953 }
Damien Neiladbbc8e2020-01-24 17:01:14 -08002954 var v uint64
2955 var n int
2956 if len(b) >= 1 && b[0] < 0x80 {
2957 v = uint64(b[0])
2958 n = 1
2959 } else if len(b) >= 2 && b[1] < 128 {
2960 v = uint64(b[0]&0x7f) + uint64(b[1])<<7
2961 n = 2
2962 } else {
2963 v, n = wire.ConsumeVarint(b)
2964 }
Damien Neile91877d2019-06-27 10:54:42 -07002965 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08002966 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07002967 }
Damien Neil68b81c32019-08-22 11:41:32 -07002968 list.Append(protoreflect.ValueOfUint64(v))
Damien Neilf0831e82020-01-21 14:25:12 -08002969 out.n = n
2970 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07002971}
2972
Damien Neil68b81c32019-08-22 11:41:32 -07002973var coderUint64SliceValue = valueCoderFuncs{
2974 size: sizeUint64SliceValue,
2975 marshal: appendUint64SliceValue,
2976 unmarshal: consumeUint64SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08002977 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07002978}
2979
Damien Neil68b81c32019-08-22 11:41:32 -07002980// sizeUint64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Uint64.
2981func sizeUint64PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
2982 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08002983 llen := list.Len()
2984 if llen == 0 {
2985 return 0
2986 }
Damien Neil7492a092019-07-10 15:23:29 -07002987 n := 0
Damien Neil2c0824b2019-12-20 12:21:25 -08002988 for i, llen := 0, llen; i < llen; i++ {
Damien Neil68b81c32019-08-22 11:41:32 -07002989 v := list.Get(i)
2990 n += wire.SizeVarint(v.Uint())
Damien Neil7492a092019-07-10 15:23:29 -07002991 }
2992 return tagsize + wire.SizeBytes(n)
2993}
2994
Damien Neil68b81c32019-08-22 11:41:32 -07002995// appendUint64PackedSliceValue encodes a []uint64 value as a packed repeated Uint64.
2996func appendUint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
2997 list := listv.List()
2998 llen := list.Len()
2999 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07003000 return b, nil
3001 }
3002 b = wire.AppendVarint(b, wiretag)
3003 n := 0
Damien Neil68b81c32019-08-22 11:41:32 -07003004 for i := 0; i < llen; i++ {
3005 v := list.Get(i)
3006 n += wire.SizeVarint(v.Uint())
Damien Neil7492a092019-07-10 15:23:29 -07003007 }
3008 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07003009 for i := 0; i < llen; i++ {
3010 v := list.Get(i)
3011 b = wire.AppendVarint(b, v.Uint())
Damien Neil7492a092019-07-10 15:23:29 -07003012 }
3013 return b, nil
3014}
3015
Damien Neil68b81c32019-08-22 11:41:32 -07003016var coderUint64PackedSliceValue = valueCoderFuncs{
3017 size: sizeUint64PackedSliceValue,
3018 marshal: appendUint64PackedSliceValue,
3019 unmarshal: consumeUint64SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08003020 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07003021}
3022
Damien Neilc37adef2019-04-01 13:49:56 -07003023// sizeSfixed32 returns the size of wire encoding a int32 pointer as a Sfixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003024func sizeSfixed32(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003025
Damien Neil316febd2020-02-09 12:26:50 -08003026 return f.tagsize + wire.SizeFixed32()
Damien Neilc37adef2019-04-01 13:49:56 -07003027}
3028
3029// appendSfixed32 wire encodes a int32 pointer as a Sfixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003030func appendSfixed32(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003031 v := *p.Int32()
Damien Neil316febd2020-02-09 12:26:50 -08003032 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003033 b = wire.AppendFixed32(b, uint32(v))
3034 return b, nil
3035}
3036
Damien Neile91877d2019-06-27 10:54:42 -07003037// consumeSfixed32 wire decodes a int32 pointer as a Sfixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003038func consumeSfixed32(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003039 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003040 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003041 }
3042 v, n := wire.ConsumeFixed32(b)
3043 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003044 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003045 }
3046 *p.Int32() = int32(v)
Damien Neilf0831e82020-01-21 14:25:12 -08003047 out.n = n
3048 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003049}
3050
Damien Neilc37adef2019-04-01 13:49:56 -07003051var coderSfixed32 = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003052 size: sizeSfixed32,
3053 marshal: appendSfixed32,
3054 unmarshal: consumeSfixed32,
Damien Neile8e88752020-02-11 11:25:16 -08003055 merge: mergeInt32,
Damien Neilc37adef2019-04-01 13:49:56 -07003056}
3057
Joe Tsaic51e2e02019-07-13 00:44:41 -07003058// sizeSfixed32NoZero returns the size of wire encoding a int32 pointer as a Sfixed32.
Damien Neilc37adef2019-04-01 13:49:56 -07003059// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08003060func sizeSfixed32NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003061 v := *p.Int32()
3062 if v == 0 {
3063 return 0
3064 }
Damien Neil316febd2020-02-09 12:26:50 -08003065 return f.tagsize + wire.SizeFixed32()
Damien Neilc37adef2019-04-01 13:49:56 -07003066}
3067
Joe Tsaic51e2e02019-07-13 00:44:41 -07003068// appendSfixed32NoZero wire encodes a int32 pointer as a Sfixed32.
Damien Neilc37adef2019-04-01 13:49:56 -07003069// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08003070func appendSfixed32NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003071 v := *p.Int32()
3072 if v == 0 {
3073 return b, nil
3074 }
Damien Neil316febd2020-02-09 12:26:50 -08003075 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003076 b = wire.AppendFixed32(b, uint32(v))
3077 return b, nil
3078}
3079
3080var coderSfixed32NoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003081 size: sizeSfixed32NoZero,
3082 marshal: appendSfixed32NoZero,
3083 unmarshal: consumeSfixed32,
Damien Neile8e88752020-02-11 11:25:16 -08003084 merge: mergeInt32NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07003085}
3086
3087// sizeSfixed32Ptr returns the size of wire encoding a *int32 pointer as a Sfixed32.
3088// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08003089func sizeSfixed32Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
3090 return f.tagsize + wire.SizeFixed32()
Damien Neilc37adef2019-04-01 13:49:56 -07003091}
3092
Damien Neile91877d2019-06-27 10:54:42 -07003093// appendSfixed32Ptr wire encodes a *int32 pointer as a Sfixed32.
Damien Neilc37adef2019-04-01 13:49:56 -07003094// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08003095func appendSfixed32Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003096 v := **p.Int32Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08003097 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003098 b = wire.AppendFixed32(b, uint32(v))
3099 return b, nil
3100}
3101
Damien Neile91877d2019-06-27 10:54:42 -07003102// consumeSfixed32Ptr wire decodes a *int32 pointer as a Sfixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003103func consumeSfixed32Ptr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003104 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003105 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003106 }
3107 v, n := wire.ConsumeFixed32(b)
3108 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003109 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003110 }
3111 vp := p.Int32Ptr()
3112 if *vp == nil {
3113 *vp = new(int32)
3114 }
3115 **vp = int32(v)
Damien Neilf0831e82020-01-21 14:25:12 -08003116 out.n = n
3117 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003118}
3119
Damien Neilc37adef2019-04-01 13:49:56 -07003120var coderSfixed32Ptr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003121 size: sizeSfixed32Ptr,
3122 marshal: appendSfixed32Ptr,
3123 unmarshal: consumeSfixed32Ptr,
Damien Neile8e88752020-02-11 11:25:16 -08003124 merge: mergeInt32Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07003125}
3126
3127// sizeSfixed32Slice returns the size of wire encoding a []int32 pointer as a repeated Sfixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003128func sizeSfixed32Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003129 s := *p.Int32Slice()
Damien Neil316febd2020-02-09 12:26:50 -08003130 size = len(s) * (f.tagsize + wire.SizeFixed32())
Damien Neilc37adef2019-04-01 13:49:56 -07003131 return size
3132}
3133
3134// appendSfixed32Slice encodes a []int32 pointer as a repeated Sfixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003135func appendSfixed32Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003136 s := *p.Int32Slice()
3137 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08003138 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003139 b = wire.AppendFixed32(b, uint32(v))
3140 }
3141 return b, nil
3142}
3143
Damien Neile91877d2019-06-27 10:54:42 -07003144// consumeSfixed32Slice wire decodes a []int32 pointer as a repeated Sfixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003145func consumeSfixed32Slice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003146 sp := p.Int32Slice()
3147 if wtyp == wire.BytesType {
3148 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08003149 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07003150 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003151 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003152 }
3153 for len(b) > 0 {
3154 v, n := wire.ConsumeFixed32(b)
3155 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003156 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003157 }
3158 s = append(s, int32(v))
3159 b = b[n:]
3160 }
3161 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08003162 out.n = n
3163 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003164 }
3165 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003166 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003167 }
3168 v, n := wire.ConsumeFixed32(b)
3169 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003170 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003171 }
3172 *sp = append(*sp, int32(v))
Damien Neilf0831e82020-01-21 14:25:12 -08003173 out.n = n
3174 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003175}
3176
Damien Neilc37adef2019-04-01 13:49:56 -07003177var coderSfixed32Slice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003178 size: sizeSfixed32Slice,
3179 marshal: appendSfixed32Slice,
3180 unmarshal: consumeSfixed32Slice,
Damien Neile8e88752020-02-11 11:25:16 -08003181 merge: mergeInt32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07003182}
3183
3184// sizeSfixed32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sfixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003185func sizeSfixed32PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003186 s := *p.Int32Slice()
3187 if len(s) == 0 {
3188 return 0
3189 }
3190 n := len(s) * wire.SizeFixed32()
Damien Neil316febd2020-02-09 12:26:50 -08003191 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07003192}
3193
3194// appendSfixed32PackedSlice encodes a []int32 pointer as a packed repeated Sfixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003195func appendSfixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003196 s := *p.Int32Slice()
3197 if len(s) == 0 {
3198 return b, nil
3199 }
Damien Neil316febd2020-02-09 12:26:50 -08003200 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003201 n := len(s) * wire.SizeFixed32()
3202 b = wire.AppendVarint(b, uint64(n))
3203 for _, v := range s {
3204 b = wire.AppendFixed32(b, uint32(v))
3205 }
3206 return b, nil
3207}
3208
3209var coderSfixed32PackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003210 size: sizeSfixed32PackedSlice,
3211 marshal: appendSfixed32PackedSlice,
3212 unmarshal: consumeSfixed32Slice,
Damien Neile8e88752020-02-11 11:25:16 -08003213 merge: mergeInt32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07003214}
3215
Damien Neil68b81c32019-08-22 11:41:32 -07003216// sizeSfixed32Value returns the size of wire encoding a int32 value as a Sfixed32.
3217func sizeSfixed32Value(v protoreflect.Value, tagsize int, _ marshalOptions) int {
Damien Neilc37adef2019-04-01 13:49:56 -07003218 return tagsize + wire.SizeFixed32()
3219}
3220
Damien Neil68b81c32019-08-22 11:41:32 -07003221// appendSfixed32Value encodes a int32 value as a Sfixed32.
3222func appendSfixed32Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003223 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07003224 b = wire.AppendFixed32(b, uint32(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07003225 return b, nil
3226}
3227
Damien Neil68b81c32019-08-22 11:41:32 -07003228// consumeSfixed32Value decodes a int32 value as a Sfixed32.
Damien Neilf0831e82020-01-21 14:25:12 -08003229func consumeSfixed32Value(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003230 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003231 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003232 }
3233 v, n := wire.ConsumeFixed32(b)
3234 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003235 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003236 }
Damien Neilf0831e82020-01-21 14:25:12 -08003237 out.n = n
3238 return protoreflect.ValueOfInt32(int32(v)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003239}
3240
Damien Neil68b81c32019-08-22 11:41:32 -07003241var coderSfixed32Value = valueCoderFuncs{
3242 size: sizeSfixed32Value,
3243 marshal: appendSfixed32Value,
3244 unmarshal: consumeSfixed32Value,
Damien Neile8e88752020-02-11 11:25:16 -08003245 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07003246}
3247
Damien Neil68b81c32019-08-22 11:41:32 -07003248// sizeSfixed32SliceValue returns the size of wire encoding a []int32 value as a repeated Sfixed32.
3249func sizeSfixed32SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
3250 list := listv.List()
3251 size = list.Len() * (tagsize + wire.SizeFixed32())
Damien Neilc37adef2019-04-01 13:49:56 -07003252 return size
3253}
3254
Damien Neil68b81c32019-08-22 11:41:32 -07003255// appendSfixed32SliceValue encodes a []int32 value as a repeated Sfixed32.
3256func appendSfixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
3257 list := listv.List()
3258 for i, llen := 0, list.Len(); i < llen; i++ {
3259 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07003260 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07003261 b = wire.AppendFixed32(b, uint32(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07003262 }
3263 return b, nil
3264}
3265
Damien Neil68b81c32019-08-22 11:41:32 -07003266// consumeSfixed32SliceValue wire decodes a []int32 value as a repeated Sfixed32.
Damien Neilf0831e82020-01-21 14:25:12 -08003267func consumeSfixed32SliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07003268 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07003269 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08003270 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07003271 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003272 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003273 }
3274 for len(b) > 0 {
3275 v, n := wire.ConsumeFixed32(b)
3276 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003277 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003278 }
Damien Neil68b81c32019-08-22 11:41:32 -07003279 list.Append(protoreflect.ValueOfInt32(int32(v)))
Damien Neile91877d2019-06-27 10:54:42 -07003280 b = b[n:]
3281 }
Damien Neilf0831e82020-01-21 14:25:12 -08003282 out.n = n
3283 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003284 }
3285 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003286 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003287 }
3288 v, n := wire.ConsumeFixed32(b)
3289 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003290 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003291 }
Damien Neil68b81c32019-08-22 11:41:32 -07003292 list.Append(protoreflect.ValueOfInt32(int32(v)))
Damien Neilf0831e82020-01-21 14:25:12 -08003293 out.n = n
3294 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003295}
3296
Damien Neil68b81c32019-08-22 11:41:32 -07003297var coderSfixed32SliceValue = valueCoderFuncs{
3298 size: sizeSfixed32SliceValue,
3299 marshal: appendSfixed32SliceValue,
3300 unmarshal: consumeSfixed32SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08003301 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07003302}
3303
Damien Neil68b81c32019-08-22 11:41:32 -07003304// sizeSfixed32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sfixed32.
3305func sizeSfixed32PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
3306 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08003307 llen := list.Len()
3308 if llen == 0 {
3309 return 0
3310 }
3311 n := llen * wire.SizeFixed32()
Damien Neil7492a092019-07-10 15:23:29 -07003312 return tagsize + wire.SizeBytes(n)
3313}
3314
Damien Neil68b81c32019-08-22 11:41:32 -07003315// appendSfixed32PackedSliceValue encodes a []int32 value as a packed repeated Sfixed32.
3316func appendSfixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
3317 list := listv.List()
3318 llen := list.Len()
3319 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07003320 return b, nil
3321 }
3322 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07003323 n := llen * wire.SizeFixed32()
Damien Neil7492a092019-07-10 15:23:29 -07003324 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07003325 for i := 0; i < llen; i++ {
3326 v := list.Get(i)
3327 b = wire.AppendFixed32(b, uint32(v.Int()))
Damien Neil7492a092019-07-10 15:23:29 -07003328 }
3329 return b, nil
3330}
3331
Damien Neil68b81c32019-08-22 11:41:32 -07003332var coderSfixed32PackedSliceValue = valueCoderFuncs{
3333 size: sizeSfixed32PackedSliceValue,
3334 marshal: appendSfixed32PackedSliceValue,
3335 unmarshal: consumeSfixed32SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08003336 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07003337}
3338
Damien Neilc37adef2019-04-01 13:49:56 -07003339// sizeFixed32 returns the size of wire encoding a uint32 pointer as a Fixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003340func sizeFixed32(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003341
Damien Neil316febd2020-02-09 12:26:50 -08003342 return f.tagsize + wire.SizeFixed32()
Damien Neilc37adef2019-04-01 13:49:56 -07003343}
3344
3345// appendFixed32 wire encodes a uint32 pointer as a Fixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003346func appendFixed32(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003347 v := *p.Uint32()
Damien Neil316febd2020-02-09 12:26:50 -08003348 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003349 b = wire.AppendFixed32(b, v)
3350 return b, nil
3351}
3352
Damien Neile91877d2019-06-27 10:54:42 -07003353// consumeFixed32 wire decodes a uint32 pointer as a Fixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003354func consumeFixed32(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003355 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003356 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003357 }
3358 v, n := wire.ConsumeFixed32(b)
3359 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003360 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003361 }
3362 *p.Uint32() = v
Damien Neilf0831e82020-01-21 14:25:12 -08003363 out.n = n
3364 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003365}
3366
Damien Neilc37adef2019-04-01 13:49:56 -07003367var coderFixed32 = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003368 size: sizeFixed32,
3369 marshal: appendFixed32,
3370 unmarshal: consumeFixed32,
Damien Neile8e88752020-02-11 11:25:16 -08003371 merge: mergeUint32,
Damien Neilc37adef2019-04-01 13:49:56 -07003372}
3373
Joe Tsaic51e2e02019-07-13 00:44:41 -07003374// sizeFixed32NoZero returns the size of wire encoding a uint32 pointer as a Fixed32.
Damien Neilc37adef2019-04-01 13:49:56 -07003375// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08003376func sizeFixed32NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003377 v := *p.Uint32()
3378 if v == 0 {
3379 return 0
3380 }
Damien Neil316febd2020-02-09 12:26:50 -08003381 return f.tagsize + wire.SizeFixed32()
Damien Neilc37adef2019-04-01 13:49:56 -07003382}
3383
Joe Tsaic51e2e02019-07-13 00:44:41 -07003384// appendFixed32NoZero wire encodes a uint32 pointer as a Fixed32.
Damien Neilc37adef2019-04-01 13:49:56 -07003385// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08003386func appendFixed32NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003387 v := *p.Uint32()
3388 if v == 0 {
3389 return b, nil
3390 }
Damien Neil316febd2020-02-09 12:26:50 -08003391 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003392 b = wire.AppendFixed32(b, v)
3393 return b, nil
3394}
3395
3396var coderFixed32NoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003397 size: sizeFixed32NoZero,
3398 marshal: appendFixed32NoZero,
3399 unmarshal: consumeFixed32,
Damien Neile8e88752020-02-11 11:25:16 -08003400 merge: mergeUint32NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07003401}
3402
3403// sizeFixed32Ptr returns the size of wire encoding a *uint32 pointer as a Fixed32.
3404// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08003405func sizeFixed32Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
3406 return f.tagsize + wire.SizeFixed32()
Damien Neilc37adef2019-04-01 13:49:56 -07003407}
3408
Damien Neile91877d2019-06-27 10:54:42 -07003409// appendFixed32Ptr wire encodes a *uint32 pointer as a Fixed32.
Damien Neilc37adef2019-04-01 13:49:56 -07003410// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08003411func appendFixed32Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003412 v := **p.Uint32Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08003413 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003414 b = wire.AppendFixed32(b, v)
3415 return b, nil
3416}
3417
Damien Neile91877d2019-06-27 10:54:42 -07003418// consumeFixed32Ptr wire decodes a *uint32 pointer as a Fixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003419func consumeFixed32Ptr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003420 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003421 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003422 }
3423 v, n := wire.ConsumeFixed32(b)
3424 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003425 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003426 }
3427 vp := p.Uint32Ptr()
3428 if *vp == nil {
3429 *vp = new(uint32)
3430 }
3431 **vp = v
Damien Neilf0831e82020-01-21 14:25:12 -08003432 out.n = n
3433 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003434}
3435
Damien Neilc37adef2019-04-01 13:49:56 -07003436var coderFixed32Ptr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003437 size: sizeFixed32Ptr,
3438 marshal: appendFixed32Ptr,
3439 unmarshal: consumeFixed32Ptr,
Damien Neile8e88752020-02-11 11:25:16 -08003440 merge: mergeUint32Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07003441}
3442
3443// sizeFixed32Slice returns the size of wire encoding a []uint32 pointer as a repeated Fixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003444func sizeFixed32Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003445 s := *p.Uint32Slice()
Damien Neil316febd2020-02-09 12:26:50 -08003446 size = len(s) * (f.tagsize + wire.SizeFixed32())
Damien Neilc37adef2019-04-01 13:49:56 -07003447 return size
3448}
3449
3450// appendFixed32Slice encodes a []uint32 pointer as a repeated Fixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003451func appendFixed32Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003452 s := *p.Uint32Slice()
3453 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08003454 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003455 b = wire.AppendFixed32(b, v)
3456 }
3457 return b, nil
3458}
3459
Damien Neile91877d2019-06-27 10:54:42 -07003460// consumeFixed32Slice wire decodes a []uint32 pointer as a repeated Fixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003461func consumeFixed32Slice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003462 sp := p.Uint32Slice()
3463 if wtyp == wire.BytesType {
3464 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08003465 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07003466 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003467 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003468 }
3469 for len(b) > 0 {
3470 v, n := wire.ConsumeFixed32(b)
3471 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003472 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003473 }
3474 s = append(s, v)
3475 b = b[n:]
3476 }
3477 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08003478 out.n = n
3479 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003480 }
3481 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003482 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003483 }
3484 v, n := wire.ConsumeFixed32(b)
3485 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003486 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003487 }
3488 *sp = append(*sp, v)
Damien Neilf0831e82020-01-21 14:25:12 -08003489 out.n = n
3490 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003491}
3492
Damien Neilc37adef2019-04-01 13:49:56 -07003493var coderFixed32Slice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003494 size: sizeFixed32Slice,
3495 marshal: appendFixed32Slice,
3496 unmarshal: consumeFixed32Slice,
Damien Neile8e88752020-02-11 11:25:16 -08003497 merge: mergeUint32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07003498}
3499
3500// sizeFixed32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Fixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003501func sizeFixed32PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003502 s := *p.Uint32Slice()
3503 if len(s) == 0 {
3504 return 0
3505 }
3506 n := len(s) * wire.SizeFixed32()
Damien Neil316febd2020-02-09 12:26:50 -08003507 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07003508}
3509
3510// appendFixed32PackedSlice encodes a []uint32 pointer as a packed repeated Fixed32.
Damien Neil316febd2020-02-09 12:26:50 -08003511func appendFixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003512 s := *p.Uint32Slice()
3513 if len(s) == 0 {
3514 return b, nil
3515 }
Damien Neil316febd2020-02-09 12:26:50 -08003516 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003517 n := len(s) * wire.SizeFixed32()
3518 b = wire.AppendVarint(b, uint64(n))
3519 for _, v := range s {
3520 b = wire.AppendFixed32(b, v)
3521 }
3522 return b, nil
3523}
3524
3525var coderFixed32PackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003526 size: sizeFixed32PackedSlice,
3527 marshal: appendFixed32PackedSlice,
3528 unmarshal: consumeFixed32Slice,
Damien Neile8e88752020-02-11 11:25:16 -08003529 merge: mergeUint32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07003530}
3531
Damien Neil68b81c32019-08-22 11:41:32 -07003532// sizeFixed32Value returns the size of wire encoding a uint32 value as a Fixed32.
3533func sizeFixed32Value(v protoreflect.Value, tagsize int, _ marshalOptions) int {
Damien Neilc37adef2019-04-01 13:49:56 -07003534 return tagsize + wire.SizeFixed32()
3535}
3536
Damien Neil68b81c32019-08-22 11:41:32 -07003537// appendFixed32Value encodes a uint32 value as a Fixed32.
3538func appendFixed32Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003539 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07003540 b = wire.AppendFixed32(b, uint32(v.Uint()))
Damien Neilc37adef2019-04-01 13:49:56 -07003541 return b, nil
3542}
3543
Damien Neil68b81c32019-08-22 11:41:32 -07003544// consumeFixed32Value decodes a uint32 value as a Fixed32.
Damien Neilf0831e82020-01-21 14:25:12 -08003545func consumeFixed32Value(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003546 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003547 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003548 }
3549 v, n := wire.ConsumeFixed32(b)
3550 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003551 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003552 }
Damien Neilf0831e82020-01-21 14:25:12 -08003553 out.n = n
3554 return protoreflect.ValueOfUint32(uint32(v)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003555}
3556
Damien Neil68b81c32019-08-22 11:41:32 -07003557var coderFixed32Value = valueCoderFuncs{
3558 size: sizeFixed32Value,
3559 marshal: appendFixed32Value,
3560 unmarshal: consumeFixed32Value,
Damien Neile8e88752020-02-11 11:25:16 -08003561 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07003562}
3563
Damien Neil68b81c32019-08-22 11:41:32 -07003564// sizeFixed32SliceValue returns the size of wire encoding a []uint32 value as a repeated Fixed32.
3565func sizeFixed32SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
3566 list := listv.List()
3567 size = list.Len() * (tagsize + wire.SizeFixed32())
Damien Neilc37adef2019-04-01 13:49:56 -07003568 return size
3569}
3570
Damien Neil68b81c32019-08-22 11:41:32 -07003571// appendFixed32SliceValue encodes a []uint32 value as a repeated Fixed32.
3572func appendFixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
3573 list := listv.List()
3574 for i, llen := 0, list.Len(); i < llen; i++ {
3575 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07003576 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07003577 b = wire.AppendFixed32(b, uint32(v.Uint()))
Damien Neilc37adef2019-04-01 13:49:56 -07003578 }
3579 return b, nil
3580}
3581
Damien Neil68b81c32019-08-22 11:41:32 -07003582// consumeFixed32SliceValue wire decodes a []uint32 value as a repeated Fixed32.
Damien Neilf0831e82020-01-21 14:25:12 -08003583func consumeFixed32SliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07003584 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07003585 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08003586 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07003587 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003588 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003589 }
3590 for len(b) > 0 {
3591 v, n := wire.ConsumeFixed32(b)
3592 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003593 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003594 }
Damien Neil68b81c32019-08-22 11:41:32 -07003595 list.Append(protoreflect.ValueOfUint32(uint32(v)))
Damien Neile91877d2019-06-27 10:54:42 -07003596 b = b[n:]
3597 }
Damien Neilf0831e82020-01-21 14:25:12 -08003598 out.n = n
3599 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003600 }
3601 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003602 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003603 }
3604 v, n := wire.ConsumeFixed32(b)
3605 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003606 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003607 }
Damien Neil68b81c32019-08-22 11:41:32 -07003608 list.Append(protoreflect.ValueOfUint32(uint32(v)))
Damien Neilf0831e82020-01-21 14:25:12 -08003609 out.n = n
3610 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003611}
3612
Damien Neil68b81c32019-08-22 11:41:32 -07003613var coderFixed32SliceValue = valueCoderFuncs{
3614 size: sizeFixed32SliceValue,
3615 marshal: appendFixed32SliceValue,
3616 unmarshal: consumeFixed32SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08003617 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07003618}
3619
Damien Neil68b81c32019-08-22 11:41:32 -07003620// sizeFixed32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Fixed32.
3621func sizeFixed32PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
3622 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08003623 llen := list.Len()
3624 if llen == 0 {
3625 return 0
3626 }
3627 n := llen * wire.SizeFixed32()
Damien Neil7492a092019-07-10 15:23:29 -07003628 return tagsize + wire.SizeBytes(n)
3629}
3630
Damien Neil68b81c32019-08-22 11:41:32 -07003631// appendFixed32PackedSliceValue encodes a []uint32 value as a packed repeated Fixed32.
3632func appendFixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
3633 list := listv.List()
3634 llen := list.Len()
3635 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07003636 return b, nil
3637 }
3638 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07003639 n := llen * wire.SizeFixed32()
Damien Neil7492a092019-07-10 15:23:29 -07003640 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07003641 for i := 0; i < llen; i++ {
3642 v := list.Get(i)
3643 b = wire.AppendFixed32(b, uint32(v.Uint()))
Damien Neil7492a092019-07-10 15:23:29 -07003644 }
3645 return b, nil
3646}
3647
Damien Neil68b81c32019-08-22 11:41:32 -07003648var coderFixed32PackedSliceValue = valueCoderFuncs{
3649 size: sizeFixed32PackedSliceValue,
3650 marshal: appendFixed32PackedSliceValue,
3651 unmarshal: consumeFixed32SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08003652 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07003653}
3654
Damien Neilc37adef2019-04-01 13:49:56 -07003655// sizeFloat returns the size of wire encoding a float32 pointer as a Float.
Damien Neil316febd2020-02-09 12:26:50 -08003656func sizeFloat(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003657
Damien Neil316febd2020-02-09 12:26:50 -08003658 return f.tagsize + wire.SizeFixed32()
Damien Neilc37adef2019-04-01 13:49:56 -07003659}
3660
3661// appendFloat wire encodes a float32 pointer as a Float.
Damien Neil316febd2020-02-09 12:26:50 -08003662func appendFloat(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003663 v := *p.Float32()
Damien Neil316febd2020-02-09 12:26:50 -08003664 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003665 b = wire.AppendFixed32(b, math.Float32bits(v))
3666 return b, nil
3667}
3668
Damien Neile91877d2019-06-27 10:54:42 -07003669// consumeFloat wire decodes a float32 pointer as a Float.
Damien Neil316febd2020-02-09 12:26:50 -08003670func consumeFloat(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003671 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003672 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003673 }
3674 v, n := wire.ConsumeFixed32(b)
3675 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003676 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003677 }
3678 *p.Float32() = math.Float32frombits(v)
Damien Neilf0831e82020-01-21 14:25:12 -08003679 out.n = n
3680 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003681}
3682
Damien Neilc37adef2019-04-01 13:49:56 -07003683var coderFloat = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003684 size: sizeFloat,
3685 marshal: appendFloat,
3686 unmarshal: consumeFloat,
Damien Neile8e88752020-02-11 11:25:16 -08003687 merge: mergeFloat32,
Damien Neilc37adef2019-04-01 13:49:56 -07003688}
3689
Joe Tsaic51e2e02019-07-13 00:44:41 -07003690// sizeFloatNoZero returns the size of wire encoding a float32 pointer as a Float.
Damien Neilc37adef2019-04-01 13:49:56 -07003691// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08003692func sizeFloatNoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003693 v := *p.Float32()
3694 if v == 0 && !math.Signbit(float64(v)) {
3695 return 0
3696 }
Damien Neil316febd2020-02-09 12:26:50 -08003697 return f.tagsize + wire.SizeFixed32()
Damien Neilc37adef2019-04-01 13:49:56 -07003698}
3699
Joe Tsaic51e2e02019-07-13 00:44:41 -07003700// appendFloatNoZero wire encodes a float32 pointer as a Float.
Damien Neilc37adef2019-04-01 13:49:56 -07003701// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08003702func appendFloatNoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003703 v := *p.Float32()
3704 if v == 0 && !math.Signbit(float64(v)) {
3705 return b, nil
3706 }
Damien Neil316febd2020-02-09 12:26:50 -08003707 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003708 b = wire.AppendFixed32(b, math.Float32bits(v))
3709 return b, nil
3710}
3711
3712var coderFloatNoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003713 size: sizeFloatNoZero,
3714 marshal: appendFloatNoZero,
3715 unmarshal: consumeFloat,
Damien Neile8e88752020-02-11 11:25:16 -08003716 merge: mergeFloat32NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07003717}
3718
3719// sizeFloatPtr returns the size of wire encoding a *float32 pointer as a Float.
3720// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08003721func sizeFloatPtr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
3722 return f.tagsize + wire.SizeFixed32()
Damien Neilc37adef2019-04-01 13:49:56 -07003723}
3724
Damien Neile91877d2019-06-27 10:54:42 -07003725// appendFloatPtr wire encodes a *float32 pointer as a Float.
Damien Neilc37adef2019-04-01 13:49:56 -07003726// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08003727func appendFloatPtr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003728 v := **p.Float32Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08003729 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003730 b = wire.AppendFixed32(b, math.Float32bits(v))
3731 return b, nil
3732}
3733
Damien Neile91877d2019-06-27 10:54:42 -07003734// consumeFloatPtr wire decodes a *float32 pointer as a Float.
Damien Neil316febd2020-02-09 12:26:50 -08003735func consumeFloatPtr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003736 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003737 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003738 }
3739 v, n := wire.ConsumeFixed32(b)
3740 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003741 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003742 }
3743 vp := p.Float32Ptr()
3744 if *vp == nil {
3745 *vp = new(float32)
3746 }
3747 **vp = math.Float32frombits(v)
Damien Neilf0831e82020-01-21 14:25:12 -08003748 out.n = n
3749 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003750}
3751
Damien Neilc37adef2019-04-01 13:49:56 -07003752var coderFloatPtr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003753 size: sizeFloatPtr,
3754 marshal: appendFloatPtr,
3755 unmarshal: consumeFloatPtr,
Damien Neile8e88752020-02-11 11:25:16 -08003756 merge: mergeFloat32Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07003757}
3758
3759// sizeFloatSlice returns the size of wire encoding a []float32 pointer as a repeated Float.
Damien Neil316febd2020-02-09 12:26:50 -08003760func sizeFloatSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003761 s := *p.Float32Slice()
Damien Neil316febd2020-02-09 12:26:50 -08003762 size = len(s) * (f.tagsize + wire.SizeFixed32())
Damien Neilc37adef2019-04-01 13:49:56 -07003763 return size
3764}
3765
3766// appendFloatSlice encodes a []float32 pointer as a repeated Float.
Damien Neil316febd2020-02-09 12:26:50 -08003767func appendFloatSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003768 s := *p.Float32Slice()
3769 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08003770 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003771 b = wire.AppendFixed32(b, math.Float32bits(v))
3772 }
3773 return b, nil
3774}
3775
Damien Neile91877d2019-06-27 10:54:42 -07003776// consumeFloatSlice wire decodes a []float32 pointer as a repeated Float.
Damien Neil316febd2020-02-09 12:26:50 -08003777func consumeFloatSlice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003778 sp := p.Float32Slice()
3779 if wtyp == wire.BytesType {
3780 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08003781 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07003782 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003783 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003784 }
3785 for len(b) > 0 {
3786 v, n := wire.ConsumeFixed32(b)
3787 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003788 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003789 }
3790 s = append(s, math.Float32frombits(v))
3791 b = b[n:]
3792 }
3793 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08003794 out.n = n
3795 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003796 }
3797 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003798 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003799 }
3800 v, n := wire.ConsumeFixed32(b)
3801 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003802 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003803 }
3804 *sp = append(*sp, math.Float32frombits(v))
Damien Neilf0831e82020-01-21 14:25:12 -08003805 out.n = n
3806 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003807}
3808
Damien Neilc37adef2019-04-01 13:49:56 -07003809var coderFloatSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003810 size: sizeFloatSlice,
3811 marshal: appendFloatSlice,
3812 unmarshal: consumeFloatSlice,
Damien Neile8e88752020-02-11 11:25:16 -08003813 merge: mergeFloat32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07003814}
3815
3816// sizeFloatPackedSlice returns the size of wire encoding a []float32 pointer as a packed repeated Float.
Damien Neil316febd2020-02-09 12:26:50 -08003817func sizeFloatPackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003818 s := *p.Float32Slice()
3819 if len(s) == 0 {
3820 return 0
3821 }
3822 n := len(s) * wire.SizeFixed32()
Damien Neil316febd2020-02-09 12:26:50 -08003823 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07003824}
3825
3826// appendFloatPackedSlice encodes a []float32 pointer as a packed repeated Float.
Damien Neil316febd2020-02-09 12:26:50 -08003827func appendFloatPackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003828 s := *p.Float32Slice()
3829 if len(s) == 0 {
3830 return b, nil
3831 }
Damien Neil316febd2020-02-09 12:26:50 -08003832 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003833 n := len(s) * wire.SizeFixed32()
3834 b = wire.AppendVarint(b, uint64(n))
3835 for _, v := range s {
3836 b = wire.AppendFixed32(b, math.Float32bits(v))
3837 }
3838 return b, nil
3839}
3840
3841var coderFloatPackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07003842 size: sizeFloatPackedSlice,
3843 marshal: appendFloatPackedSlice,
3844 unmarshal: consumeFloatSlice,
Damien Neile8e88752020-02-11 11:25:16 -08003845 merge: mergeFloat32Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07003846}
3847
Damien Neil68b81c32019-08-22 11:41:32 -07003848// sizeFloatValue returns the size of wire encoding a float32 value as a Float.
3849func sizeFloatValue(v protoreflect.Value, tagsize int, _ marshalOptions) int {
Damien Neilc37adef2019-04-01 13:49:56 -07003850 return tagsize + wire.SizeFixed32()
3851}
3852
Damien Neil68b81c32019-08-22 11:41:32 -07003853// appendFloatValue encodes a float32 value as a Float.
3854func appendFloatValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003855 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07003856 b = wire.AppendFixed32(b, math.Float32bits(float32(v.Float())))
Damien Neilc37adef2019-04-01 13:49:56 -07003857 return b, nil
3858}
3859
Damien Neil68b81c32019-08-22 11:41:32 -07003860// consumeFloatValue decodes a float32 value as a Float.
Damien Neilf0831e82020-01-21 14:25:12 -08003861func consumeFloatValue(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003862 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003863 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003864 }
3865 v, n := wire.ConsumeFixed32(b)
3866 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003867 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003868 }
Damien Neilf0831e82020-01-21 14:25:12 -08003869 out.n = n
3870 return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003871}
3872
Damien Neil68b81c32019-08-22 11:41:32 -07003873var coderFloatValue = valueCoderFuncs{
3874 size: sizeFloatValue,
3875 marshal: appendFloatValue,
3876 unmarshal: consumeFloatValue,
Damien Neile8e88752020-02-11 11:25:16 -08003877 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07003878}
3879
Damien Neil68b81c32019-08-22 11:41:32 -07003880// sizeFloatSliceValue returns the size of wire encoding a []float32 value as a repeated Float.
3881func sizeFloatSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
3882 list := listv.List()
3883 size = list.Len() * (tagsize + wire.SizeFixed32())
Damien Neilc37adef2019-04-01 13:49:56 -07003884 return size
3885}
3886
Damien Neil68b81c32019-08-22 11:41:32 -07003887// appendFloatSliceValue encodes a []float32 value as a repeated Float.
3888func appendFloatSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
3889 list := listv.List()
3890 for i, llen := 0, list.Len(); i < llen; i++ {
3891 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07003892 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07003893 b = wire.AppendFixed32(b, math.Float32bits(float32(v.Float())))
Damien Neilc37adef2019-04-01 13:49:56 -07003894 }
3895 return b, nil
3896}
3897
Damien Neil68b81c32019-08-22 11:41:32 -07003898// consumeFloatSliceValue wire decodes a []float32 value as a repeated Float.
Damien Neilf0831e82020-01-21 14:25:12 -08003899func consumeFloatSliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07003900 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07003901 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08003902 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07003903 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003904 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003905 }
3906 for len(b) > 0 {
3907 v, n := wire.ConsumeFixed32(b)
3908 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003909 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003910 }
Damien Neil68b81c32019-08-22 11:41:32 -07003911 list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
Damien Neile91877d2019-06-27 10:54:42 -07003912 b = b[n:]
3913 }
Damien Neilf0831e82020-01-21 14:25:12 -08003914 out.n = n
3915 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003916 }
3917 if wtyp != wire.Fixed32Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003918 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003919 }
3920 v, n := wire.ConsumeFixed32(b)
3921 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003922 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003923 }
Damien Neil68b81c32019-08-22 11:41:32 -07003924 list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
Damien Neilf0831e82020-01-21 14:25:12 -08003925 out.n = n
3926 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003927}
3928
Damien Neil68b81c32019-08-22 11:41:32 -07003929var coderFloatSliceValue = valueCoderFuncs{
3930 size: sizeFloatSliceValue,
3931 marshal: appendFloatSliceValue,
3932 unmarshal: consumeFloatSliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08003933 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07003934}
3935
Damien Neil68b81c32019-08-22 11:41:32 -07003936// sizeFloatPackedSliceValue returns the size of wire encoding a []float32 value as a packed repeated Float.
3937func sizeFloatPackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
3938 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08003939 llen := list.Len()
3940 if llen == 0 {
3941 return 0
3942 }
3943 n := llen * wire.SizeFixed32()
Damien Neil7492a092019-07-10 15:23:29 -07003944 return tagsize + wire.SizeBytes(n)
3945}
3946
Damien Neil68b81c32019-08-22 11:41:32 -07003947// appendFloatPackedSliceValue encodes a []float32 value as a packed repeated Float.
3948func appendFloatPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
3949 list := listv.List()
3950 llen := list.Len()
3951 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07003952 return b, nil
3953 }
3954 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07003955 n := llen * wire.SizeFixed32()
Damien Neil7492a092019-07-10 15:23:29 -07003956 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07003957 for i := 0; i < llen; i++ {
3958 v := list.Get(i)
3959 b = wire.AppendFixed32(b, math.Float32bits(float32(v.Float())))
Damien Neil7492a092019-07-10 15:23:29 -07003960 }
3961 return b, nil
3962}
3963
Damien Neil68b81c32019-08-22 11:41:32 -07003964var coderFloatPackedSliceValue = valueCoderFuncs{
3965 size: sizeFloatPackedSliceValue,
3966 marshal: appendFloatPackedSliceValue,
3967 unmarshal: consumeFloatSliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08003968 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07003969}
3970
Damien Neilc37adef2019-04-01 13:49:56 -07003971// sizeSfixed64 returns the size of wire encoding a int64 pointer as a Sfixed64.
Damien Neil316febd2020-02-09 12:26:50 -08003972func sizeSfixed64(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07003973
Damien Neil316febd2020-02-09 12:26:50 -08003974 return f.tagsize + wire.SizeFixed64()
Damien Neilc37adef2019-04-01 13:49:56 -07003975}
3976
3977// appendSfixed64 wire encodes a int64 pointer as a Sfixed64.
Damien Neil316febd2020-02-09 12:26:50 -08003978func appendSfixed64(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07003979 v := *p.Int64()
Damien Neil316febd2020-02-09 12:26:50 -08003980 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07003981 b = wire.AppendFixed64(b, uint64(v))
3982 return b, nil
3983}
3984
Damien Neile91877d2019-06-27 10:54:42 -07003985// consumeSfixed64 wire decodes a int64 pointer as a Sfixed64.
Damien Neil316febd2020-02-09 12:26:50 -08003986func consumeSfixed64(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07003987 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08003988 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07003989 }
3990 v, n := wire.ConsumeFixed64(b)
3991 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08003992 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07003993 }
3994 *p.Int64() = int64(v)
Damien Neilf0831e82020-01-21 14:25:12 -08003995 out.n = n
3996 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07003997}
3998
Damien Neilc37adef2019-04-01 13:49:56 -07003999var coderSfixed64 = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004000 size: sizeSfixed64,
4001 marshal: appendSfixed64,
4002 unmarshal: consumeSfixed64,
Damien Neile8e88752020-02-11 11:25:16 -08004003 merge: mergeInt64,
Damien Neilc37adef2019-04-01 13:49:56 -07004004}
4005
Joe Tsaic51e2e02019-07-13 00:44:41 -07004006// sizeSfixed64NoZero returns the size of wire encoding a int64 pointer as a Sfixed64.
Damien Neilc37adef2019-04-01 13:49:56 -07004007// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08004008func sizeSfixed64NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004009 v := *p.Int64()
4010 if v == 0 {
4011 return 0
4012 }
Damien Neil316febd2020-02-09 12:26:50 -08004013 return f.tagsize + wire.SizeFixed64()
Damien Neilc37adef2019-04-01 13:49:56 -07004014}
4015
Joe Tsaic51e2e02019-07-13 00:44:41 -07004016// appendSfixed64NoZero wire encodes a int64 pointer as a Sfixed64.
Damien Neilc37adef2019-04-01 13:49:56 -07004017// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08004018func appendSfixed64NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004019 v := *p.Int64()
4020 if v == 0 {
4021 return b, nil
4022 }
Damien Neil316febd2020-02-09 12:26:50 -08004023 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004024 b = wire.AppendFixed64(b, uint64(v))
4025 return b, nil
4026}
4027
4028var coderSfixed64NoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004029 size: sizeSfixed64NoZero,
4030 marshal: appendSfixed64NoZero,
4031 unmarshal: consumeSfixed64,
Damien Neile8e88752020-02-11 11:25:16 -08004032 merge: mergeInt64NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07004033}
4034
4035// sizeSfixed64Ptr returns the size of wire encoding a *int64 pointer as a Sfixed64.
4036// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08004037func sizeSfixed64Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
4038 return f.tagsize + wire.SizeFixed64()
Damien Neilc37adef2019-04-01 13:49:56 -07004039}
4040
Damien Neile91877d2019-06-27 10:54:42 -07004041// appendSfixed64Ptr wire encodes a *int64 pointer as a Sfixed64.
Damien Neilc37adef2019-04-01 13:49:56 -07004042// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08004043func appendSfixed64Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004044 v := **p.Int64Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08004045 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004046 b = wire.AppendFixed64(b, uint64(v))
4047 return b, nil
4048}
4049
Damien Neile91877d2019-06-27 10:54:42 -07004050// consumeSfixed64Ptr wire decodes a *int64 pointer as a Sfixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004051func consumeSfixed64Ptr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004052 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004053 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004054 }
4055 v, n := wire.ConsumeFixed64(b)
4056 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004057 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004058 }
4059 vp := p.Int64Ptr()
4060 if *vp == nil {
4061 *vp = new(int64)
4062 }
4063 **vp = int64(v)
Damien Neilf0831e82020-01-21 14:25:12 -08004064 out.n = n
4065 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004066}
4067
Damien Neilc37adef2019-04-01 13:49:56 -07004068var coderSfixed64Ptr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004069 size: sizeSfixed64Ptr,
4070 marshal: appendSfixed64Ptr,
4071 unmarshal: consumeSfixed64Ptr,
Damien Neile8e88752020-02-11 11:25:16 -08004072 merge: mergeInt64Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07004073}
4074
4075// sizeSfixed64Slice returns the size of wire encoding a []int64 pointer as a repeated Sfixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004076func sizeSfixed64Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004077 s := *p.Int64Slice()
Damien Neil316febd2020-02-09 12:26:50 -08004078 size = len(s) * (f.tagsize + wire.SizeFixed64())
Damien Neilc37adef2019-04-01 13:49:56 -07004079 return size
4080}
4081
4082// appendSfixed64Slice encodes a []int64 pointer as a repeated Sfixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004083func appendSfixed64Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004084 s := *p.Int64Slice()
4085 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08004086 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004087 b = wire.AppendFixed64(b, uint64(v))
4088 }
4089 return b, nil
4090}
4091
Damien Neile91877d2019-06-27 10:54:42 -07004092// consumeSfixed64Slice wire decodes a []int64 pointer as a repeated Sfixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004093func consumeSfixed64Slice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004094 sp := p.Int64Slice()
4095 if wtyp == wire.BytesType {
4096 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08004097 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07004098 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004099 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004100 }
4101 for len(b) > 0 {
4102 v, n := wire.ConsumeFixed64(b)
4103 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004104 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004105 }
4106 s = append(s, int64(v))
4107 b = b[n:]
4108 }
4109 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08004110 out.n = n
4111 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004112 }
4113 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004114 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004115 }
4116 v, n := wire.ConsumeFixed64(b)
4117 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004118 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004119 }
4120 *sp = append(*sp, int64(v))
Damien Neilf0831e82020-01-21 14:25:12 -08004121 out.n = n
4122 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004123}
4124
Damien Neilc37adef2019-04-01 13:49:56 -07004125var coderSfixed64Slice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004126 size: sizeSfixed64Slice,
4127 marshal: appendSfixed64Slice,
4128 unmarshal: consumeSfixed64Slice,
Damien Neile8e88752020-02-11 11:25:16 -08004129 merge: mergeInt64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07004130}
4131
4132// sizeSfixed64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sfixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004133func sizeSfixed64PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004134 s := *p.Int64Slice()
4135 if len(s) == 0 {
4136 return 0
4137 }
4138 n := len(s) * wire.SizeFixed64()
Damien Neil316febd2020-02-09 12:26:50 -08004139 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07004140}
4141
4142// appendSfixed64PackedSlice encodes a []int64 pointer as a packed repeated Sfixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004143func appendSfixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004144 s := *p.Int64Slice()
4145 if len(s) == 0 {
4146 return b, nil
4147 }
Damien Neil316febd2020-02-09 12:26:50 -08004148 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004149 n := len(s) * wire.SizeFixed64()
4150 b = wire.AppendVarint(b, uint64(n))
4151 for _, v := range s {
4152 b = wire.AppendFixed64(b, uint64(v))
4153 }
4154 return b, nil
4155}
4156
4157var coderSfixed64PackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004158 size: sizeSfixed64PackedSlice,
4159 marshal: appendSfixed64PackedSlice,
4160 unmarshal: consumeSfixed64Slice,
Damien Neile8e88752020-02-11 11:25:16 -08004161 merge: mergeInt64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07004162}
4163
Damien Neil68b81c32019-08-22 11:41:32 -07004164// sizeSfixed64Value returns the size of wire encoding a int64 value as a Sfixed64.
4165func sizeSfixed64Value(v protoreflect.Value, tagsize int, _ marshalOptions) int {
Damien Neilc37adef2019-04-01 13:49:56 -07004166 return tagsize + wire.SizeFixed64()
4167}
4168
Damien Neil68b81c32019-08-22 11:41:32 -07004169// appendSfixed64Value encodes a int64 value as a Sfixed64.
4170func appendSfixed64Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004171 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07004172 b = wire.AppendFixed64(b, uint64(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07004173 return b, nil
4174}
4175
Damien Neil68b81c32019-08-22 11:41:32 -07004176// consumeSfixed64Value decodes a int64 value as a Sfixed64.
Damien Neilf0831e82020-01-21 14:25:12 -08004177func consumeSfixed64Value(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004178 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004179 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004180 }
4181 v, n := wire.ConsumeFixed64(b)
4182 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004183 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004184 }
Damien Neilf0831e82020-01-21 14:25:12 -08004185 out.n = n
4186 return protoreflect.ValueOfInt64(int64(v)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004187}
4188
Damien Neil68b81c32019-08-22 11:41:32 -07004189var coderSfixed64Value = valueCoderFuncs{
4190 size: sizeSfixed64Value,
4191 marshal: appendSfixed64Value,
4192 unmarshal: consumeSfixed64Value,
Damien Neile8e88752020-02-11 11:25:16 -08004193 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07004194}
4195
Damien Neil68b81c32019-08-22 11:41:32 -07004196// sizeSfixed64SliceValue returns the size of wire encoding a []int64 value as a repeated Sfixed64.
4197func sizeSfixed64SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
4198 list := listv.List()
4199 size = list.Len() * (tagsize + wire.SizeFixed64())
Damien Neilc37adef2019-04-01 13:49:56 -07004200 return size
4201}
4202
Damien Neil68b81c32019-08-22 11:41:32 -07004203// appendSfixed64SliceValue encodes a []int64 value as a repeated Sfixed64.
4204func appendSfixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
4205 list := listv.List()
4206 for i, llen := 0, list.Len(); i < llen; i++ {
4207 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07004208 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07004209 b = wire.AppendFixed64(b, uint64(v.Int()))
Damien Neilc37adef2019-04-01 13:49:56 -07004210 }
4211 return b, nil
4212}
4213
Damien Neil68b81c32019-08-22 11:41:32 -07004214// consumeSfixed64SliceValue wire decodes a []int64 value as a repeated Sfixed64.
Damien Neilf0831e82020-01-21 14:25:12 -08004215func consumeSfixed64SliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07004216 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07004217 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08004218 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07004219 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004220 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004221 }
4222 for len(b) > 0 {
4223 v, n := wire.ConsumeFixed64(b)
4224 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004225 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004226 }
Damien Neil68b81c32019-08-22 11:41:32 -07004227 list.Append(protoreflect.ValueOfInt64(int64(v)))
Damien Neile91877d2019-06-27 10:54:42 -07004228 b = b[n:]
4229 }
Damien Neilf0831e82020-01-21 14:25:12 -08004230 out.n = n
4231 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004232 }
4233 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004234 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004235 }
4236 v, n := wire.ConsumeFixed64(b)
4237 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004238 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004239 }
Damien Neil68b81c32019-08-22 11:41:32 -07004240 list.Append(protoreflect.ValueOfInt64(int64(v)))
Damien Neilf0831e82020-01-21 14:25:12 -08004241 out.n = n
4242 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004243}
4244
Damien Neil68b81c32019-08-22 11:41:32 -07004245var coderSfixed64SliceValue = valueCoderFuncs{
4246 size: sizeSfixed64SliceValue,
4247 marshal: appendSfixed64SliceValue,
4248 unmarshal: consumeSfixed64SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08004249 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07004250}
4251
Damien Neil68b81c32019-08-22 11:41:32 -07004252// sizeSfixed64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sfixed64.
4253func sizeSfixed64PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
4254 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08004255 llen := list.Len()
4256 if llen == 0 {
4257 return 0
4258 }
4259 n := llen * wire.SizeFixed64()
Damien Neil7492a092019-07-10 15:23:29 -07004260 return tagsize + wire.SizeBytes(n)
4261}
4262
Damien Neil68b81c32019-08-22 11:41:32 -07004263// appendSfixed64PackedSliceValue encodes a []int64 value as a packed repeated Sfixed64.
4264func appendSfixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
4265 list := listv.List()
4266 llen := list.Len()
4267 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07004268 return b, nil
4269 }
4270 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07004271 n := llen * wire.SizeFixed64()
Damien Neil7492a092019-07-10 15:23:29 -07004272 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07004273 for i := 0; i < llen; i++ {
4274 v := list.Get(i)
4275 b = wire.AppendFixed64(b, uint64(v.Int()))
Damien Neil7492a092019-07-10 15:23:29 -07004276 }
4277 return b, nil
4278}
4279
Damien Neil68b81c32019-08-22 11:41:32 -07004280var coderSfixed64PackedSliceValue = valueCoderFuncs{
4281 size: sizeSfixed64PackedSliceValue,
4282 marshal: appendSfixed64PackedSliceValue,
4283 unmarshal: consumeSfixed64SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08004284 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07004285}
4286
Damien Neilc37adef2019-04-01 13:49:56 -07004287// sizeFixed64 returns the size of wire encoding a uint64 pointer as a Fixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004288func sizeFixed64(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004289
Damien Neil316febd2020-02-09 12:26:50 -08004290 return f.tagsize + wire.SizeFixed64()
Damien Neilc37adef2019-04-01 13:49:56 -07004291}
4292
4293// appendFixed64 wire encodes a uint64 pointer as a Fixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004294func appendFixed64(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004295 v := *p.Uint64()
Damien Neil316febd2020-02-09 12:26:50 -08004296 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004297 b = wire.AppendFixed64(b, v)
4298 return b, nil
4299}
4300
Damien Neile91877d2019-06-27 10:54:42 -07004301// consumeFixed64 wire decodes a uint64 pointer as a Fixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004302func consumeFixed64(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004303 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004304 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004305 }
4306 v, n := wire.ConsumeFixed64(b)
4307 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004308 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004309 }
4310 *p.Uint64() = v
Damien Neilf0831e82020-01-21 14:25:12 -08004311 out.n = n
4312 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004313}
4314
Damien Neilc37adef2019-04-01 13:49:56 -07004315var coderFixed64 = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004316 size: sizeFixed64,
4317 marshal: appendFixed64,
4318 unmarshal: consumeFixed64,
Damien Neile8e88752020-02-11 11:25:16 -08004319 merge: mergeUint64,
Damien Neilc37adef2019-04-01 13:49:56 -07004320}
4321
Joe Tsaic51e2e02019-07-13 00:44:41 -07004322// sizeFixed64NoZero returns the size of wire encoding a uint64 pointer as a Fixed64.
Damien Neilc37adef2019-04-01 13:49:56 -07004323// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08004324func sizeFixed64NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004325 v := *p.Uint64()
4326 if v == 0 {
4327 return 0
4328 }
Damien Neil316febd2020-02-09 12:26:50 -08004329 return f.tagsize + wire.SizeFixed64()
Damien Neilc37adef2019-04-01 13:49:56 -07004330}
4331
Joe Tsaic51e2e02019-07-13 00:44:41 -07004332// appendFixed64NoZero wire encodes a uint64 pointer as a Fixed64.
Damien Neilc37adef2019-04-01 13:49:56 -07004333// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08004334func appendFixed64NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004335 v := *p.Uint64()
4336 if v == 0 {
4337 return b, nil
4338 }
Damien Neil316febd2020-02-09 12:26:50 -08004339 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004340 b = wire.AppendFixed64(b, v)
4341 return b, nil
4342}
4343
4344var coderFixed64NoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004345 size: sizeFixed64NoZero,
4346 marshal: appendFixed64NoZero,
4347 unmarshal: consumeFixed64,
Damien Neile8e88752020-02-11 11:25:16 -08004348 merge: mergeUint64NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07004349}
4350
4351// sizeFixed64Ptr returns the size of wire encoding a *uint64 pointer as a Fixed64.
4352// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08004353func sizeFixed64Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
4354 return f.tagsize + wire.SizeFixed64()
Damien Neilc37adef2019-04-01 13:49:56 -07004355}
4356
Damien Neile91877d2019-06-27 10:54:42 -07004357// appendFixed64Ptr wire encodes a *uint64 pointer as a Fixed64.
Damien Neilc37adef2019-04-01 13:49:56 -07004358// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08004359func appendFixed64Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004360 v := **p.Uint64Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08004361 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004362 b = wire.AppendFixed64(b, v)
4363 return b, nil
4364}
4365
Damien Neile91877d2019-06-27 10:54:42 -07004366// consumeFixed64Ptr wire decodes a *uint64 pointer as a Fixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004367func consumeFixed64Ptr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004368 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004369 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004370 }
4371 v, n := wire.ConsumeFixed64(b)
4372 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004373 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004374 }
4375 vp := p.Uint64Ptr()
4376 if *vp == nil {
4377 *vp = new(uint64)
4378 }
4379 **vp = v
Damien Neilf0831e82020-01-21 14:25:12 -08004380 out.n = n
4381 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004382}
4383
Damien Neilc37adef2019-04-01 13:49:56 -07004384var coderFixed64Ptr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004385 size: sizeFixed64Ptr,
4386 marshal: appendFixed64Ptr,
4387 unmarshal: consumeFixed64Ptr,
Damien Neile8e88752020-02-11 11:25:16 -08004388 merge: mergeUint64Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07004389}
4390
4391// sizeFixed64Slice returns the size of wire encoding a []uint64 pointer as a repeated Fixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004392func sizeFixed64Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004393 s := *p.Uint64Slice()
Damien Neil316febd2020-02-09 12:26:50 -08004394 size = len(s) * (f.tagsize + wire.SizeFixed64())
Damien Neilc37adef2019-04-01 13:49:56 -07004395 return size
4396}
4397
4398// appendFixed64Slice encodes a []uint64 pointer as a repeated Fixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004399func appendFixed64Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004400 s := *p.Uint64Slice()
4401 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08004402 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004403 b = wire.AppendFixed64(b, v)
4404 }
4405 return b, nil
4406}
4407
Damien Neile91877d2019-06-27 10:54:42 -07004408// consumeFixed64Slice wire decodes a []uint64 pointer as a repeated Fixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004409func consumeFixed64Slice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004410 sp := p.Uint64Slice()
4411 if wtyp == wire.BytesType {
4412 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08004413 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07004414 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004415 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004416 }
4417 for len(b) > 0 {
4418 v, n := wire.ConsumeFixed64(b)
4419 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004420 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004421 }
4422 s = append(s, v)
4423 b = b[n:]
4424 }
4425 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08004426 out.n = n
4427 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004428 }
4429 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004430 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004431 }
4432 v, n := wire.ConsumeFixed64(b)
4433 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004434 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004435 }
4436 *sp = append(*sp, v)
Damien Neilf0831e82020-01-21 14:25:12 -08004437 out.n = n
4438 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004439}
4440
Damien Neilc37adef2019-04-01 13:49:56 -07004441var coderFixed64Slice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004442 size: sizeFixed64Slice,
4443 marshal: appendFixed64Slice,
4444 unmarshal: consumeFixed64Slice,
Damien Neile8e88752020-02-11 11:25:16 -08004445 merge: mergeUint64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07004446}
4447
4448// sizeFixed64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Fixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004449func sizeFixed64PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004450 s := *p.Uint64Slice()
4451 if len(s) == 0 {
4452 return 0
4453 }
4454 n := len(s) * wire.SizeFixed64()
Damien Neil316febd2020-02-09 12:26:50 -08004455 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07004456}
4457
4458// appendFixed64PackedSlice encodes a []uint64 pointer as a packed repeated Fixed64.
Damien Neil316febd2020-02-09 12:26:50 -08004459func appendFixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004460 s := *p.Uint64Slice()
4461 if len(s) == 0 {
4462 return b, nil
4463 }
Damien Neil316febd2020-02-09 12:26:50 -08004464 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004465 n := len(s) * wire.SizeFixed64()
4466 b = wire.AppendVarint(b, uint64(n))
4467 for _, v := range s {
4468 b = wire.AppendFixed64(b, v)
4469 }
4470 return b, nil
4471}
4472
4473var coderFixed64PackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004474 size: sizeFixed64PackedSlice,
4475 marshal: appendFixed64PackedSlice,
4476 unmarshal: consumeFixed64Slice,
Damien Neile8e88752020-02-11 11:25:16 -08004477 merge: mergeUint64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07004478}
4479
Damien Neil68b81c32019-08-22 11:41:32 -07004480// sizeFixed64Value returns the size of wire encoding a uint64 value as a Fixed64.
4481func sizeFixed64Value(v protoreflect.Value, tagsize int, _ marshalOptions) int {
Damien Neilc37adef2019-04-01 13:49:56 -07004482 return tagsize + wire.SizeFixed64()
4483}
4484
Damien Neil68b81c32019-08-22 11:41:32 -07004485// appendFixed64Value encodes a uint64 value as a Fixed64.
4486func appendFixed64Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004487 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07004488 b = wire.AppendFixed64(b, v.Uint())
Damien Neilc37adef2019-04-01 13:49:56 -07004489 return b, nil
4490}
4491
Damien Neil68b81c32019-08-22 11:41:32 -07004492// consumeFixed64Value decodes a uint64 value as a Fixed64.
Damien Neilf0831e82020-01-21 14:25:12 -08004493func consumeFixed64Value(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004494 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004495 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004496 }
4497 v, n := wire.ConsumeFixed64(b)
4498 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004499 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004500 }
Damien Neilf0831e82020-01-21 14:25:12 -08004501 out.n = n
4502 return protoreflect.ValueOfUint64(v), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004503}
4504
Damien Neil68b81c32019-08-22 11:41:32 -07004505var coderFixed64Value = valueCoderFuncs{
4506 size: sizeFixed64Value,
4507 marshal: appendFixed64Value,
4508 unmarshal: consumeFixed64Value,
Damien Neile8e88752020-02-11 11:25:16 -08004509 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07004510}
4511
Damien Neil68b81c32019-08-22 11:41:32 -07004512// sizeFixed64SliceValue returns the size of wire encoding a []uint64 value as a repeated Fixed64.
4513func sizeFixed64SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
4514 list := listv.List()
4515 size = list.Len() * (tagsize + wire.SizeFixed64())
Damien Neilc37adef2019-04-01 13:49:56 -07004516 return size
4517}
4518
Damien Neil68b81c32019-08-22 11:41:32 -07004519// appendFixed64SliceValue encodes a []uint64 value as a repeated Fixed64.
4520func appendFixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
4521 list := listv.List()
4522 for i, llen := 0, list.Len(); i < llen; i++ {
4523 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07004524 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07004525 b = wire.AppendFixed64(b, v.Uint())
Damien Neilc37adef2019-04-01 13:49:56 -07004526 }
4527 return b, nil
4528}
4529
Damien Neil68b81c32019-08-22 11:41:32 -07004530// consumeFixed64SliceValue wire decodes a []uint64 value as a repeated Fixed64.
Damien Neilf0831e82020-01-21 14:25:12 -08004531func consumeFixed64SliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07004532 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07004533 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08004534 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07004535 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004536 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004537 }
4538 for len(b) > 0 {
4539 v, n := wire.ConsumeFixed64(b)
4540 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004541 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004542 }
Damien Neil68b81c32019-08-22 11:41:32 -07004543 list.Append(protoreflect.ValueOfUint64(v))
Damien Neile91877d2019-06-27 10:54:42 -07004544 b = b[n:]
4545 }
Damien Neilf0831e82020-01-21 14:25:12 -08004546 out.n = n
4547 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004548 }
4549 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004550 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004551 }
4552 v, n := wire.ConsumeFixed64(b)
4553 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004554 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004555 }
Damien Neil68b81c32019-08-22 11:41:32 -07004556 list.Append(protoreflect.ValueOfUint64(v))
Damien Neilf0831e82020-01-21 14:25:12 -08004557 out.n = n
4558 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004559}
4560
Damien Neil68b81c32019-08-22 11:41:32 -07004561var coderFixed64SliceValue = valueCoderFuncs{
4562 size: sizeFixed64SliceValue,
4563 marshal: appendFixed64SliceValue,
4564 unmarshal: consumeFixed64SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08004565 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07004566}
4567
Damien Neil68b81c32019-08-22 11:41:32 -07004568// sizeFixed64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Fixed64.
4569func sizeFixed64PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
4570 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08004571 llen := list.Len()
4572 if llen == 0 {
4573 return 0
4574 }
4575 n := llen * wire.SizeFixed64()
Damien Neil7492a092019-07-10 15:23:29 -07004576 return tagsize + wire.SizeBytes(n)
4577}
4578
Damien Neil68b81c32019-08-22 11:41:32 -07004579// appendFixed64PackedSliceValue encodes a []uint64 value as a packed repeated Fixed64.
4580func appendFixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
4581 list := listv.List()
4582 llen := list.Len()
4583 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07004584 return b, nil
4585 }
4586 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07004587 n := llen * wire.SizeFixed64()
Damien Neil7492a092019-07-10 15:23:29 -07004588 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07004589 for i := 0; i < llen; i++ {
4590 v := list.Get(i)
4591 b = wire.AppendFixed64(b, v.Uint())
Damien Neil7492a092019-07-10 15:23:29 -07004592 }
4593 return b, nil
4594}
4595
Damien Neil68b81c32019-08-22 11:41:32 -07004596var coderFixed64PackedSliceValue = valueCoderFuncs{
4597 size: sizeFixed64PackedSliceValue,
4598 marshal: appendFixed64PackedSliceValue,
4599 unmarshal: consumeFixed64SliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08004600 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07004601}
4602
Damien Neilc37adef2019-04-01 13:49:56 -07004603// sizeDouble returns the size of wire encoding a float64 pointer as a Double.
Damien Neil316febd2020-02-09 12:26:50 -08004604func sizeDouble(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004605
Damien Neil316febd2020-02-09 12:26:50 -08004606 return f.tagsize + wire.SizeFixed64()
Damien Neilc37adef2019-04-01 13:49:56 -07004607}
4608
4609// appendDouble wire encodes a float64 pointer as a Double.
Damien Neil316febd2020-02-09 12:26:50 -08004610func appendDouble(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004611 v := *p.Float64()
Damien Neil316febd2020-02-09 12:26:50 -08004612 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004613 b = wire.AppendFixed64(b, math.Float64bits(v))
4614 return b, nil
4615}
4616
Damien Neile91877d2019-06-27 10:54:42 -07004617// consumeDouble wire decodes a float64 pointer as a Double.
Damien Neil316febd2020-02-09 12:26:50 -08004618func consumeDouble(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004619 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004620 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004621 }
4622 v, n := wire.ConsumeFixed64(b)
4623 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004624 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004625 }
4626 *p.Float64() = math.Float64frombits(v)
Damien Neilf0831e82020-01-21 14:25:12 -08004627 out.n = n
4628 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004629}
4630
Damien Neilc37adef2019-04-01 13:49:56 -07004631var coderDouble = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004632 size: sizeDouble,
4633 marshal: appendDouble,
4634 unmarshal: consumeDouble,
Damien Neile8e88752020-02-11 11:25:16 -08004635 merge: mergeFloat64,
Damien Neilc37adef2019-04-01 13:49:56 -07004636}
4637
Joe Tsaic51e2e02019-07-13 00:44:41 -07004638// sizeDoubleNoZero returns the size of wire encoding a float64 pointer as a Double.
Damien Neilc37adef2019-04-01 13:49:56 -07004639// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08004640func sizeDoubleNoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004641 v := *p.Float64()
4642 if v == 0 && !math.Signbit(float64(v)) {
4643 return 0
4644 }
Damien Neil316febd2020-02-09 12:26:50 -08004645 return f.tagsize + wire.SizeFixed64()
Damien Neilc37adef2019-04-01 13:49:56 -07004646}
4647
Joe Tsaic51e2e02019-07-13 00:44:41 -07004648// appendDoubleNoZero wire encodes a float64 pointer as a Double.
Damien Neilc37adef2019-04-01 13:49:56 -07004649// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08004650func appendDoubleNoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004651 v := *p.Float64()
4652 if v == 0 && !math.Signbit(float64(v)) {
4653 return b, nil
4654 }
Damien Neil316febd2020-02-09 12:26:50 -08004655 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004656 b = wire.AppendFixed64(b, math.Float64bits(v))
4657 return b, nil
4658}
4659
4660var coderDoubleNoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004661 size: sizeDoubleNoZero,
4662 marshal: appendDoubleNoZero,
4663 unmarshal: consumeDouble,
Damien Neile8e88752020-02-11 11:25:16 -08004664 merge: mergeFloat64NoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07004665}
4666
4667// sizeDoublePtr returns the size of wire encoding a *float64 pointer as a Double.
4668// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08004669func sizeDoublePtr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
4670 return f.tagsize + wire.SizeFixed64()
Damien Neilc37adef2019-04-01 13:49:56 -07004671}
4672
Damien Neile91877d2019-06-27 10:54:42 -07004673// appendDoublePtr wire encodes a *float64 pointer as a Double.
Damien Neilc37adef2019-04-01 13:49:56 -07004674// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08004675func appendDoublePtr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004676 v := **p.Float64Ptr()
Damien Neil316febd2020-02-09 12:26:50 -08004677 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004678 b = wire.AppendFixed64(b, math.Float64bits(v))
4679 return b, nil
4680}
4681
Damien Neile91877d2019-06-27 10:54:42 -07004682// consumeDoublePtr wire decodes a *float64 pointer as a Double.
Damien Neil316febd2020-02-09 12:26:50 -08004683func consumeDoublePtr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004684 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004685 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004686 }
4687 v, n := wire.ConsumeFixed64(b)
4688 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004689 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004690 }
4691 vp := p.Float64Ptr()
4692 if *vp == nil {
4693 *vp = new(float64)
4694 }
4695 **vp = math.Float64frombits(v)
Damien Neilf0831e82020-01-21 14:25:12 -08004696 out.n = n
4697 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004698}
4699
Damien Neilc37adef2019-04-01 13:49:56 -07004700var coderDoublePtr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004701 size: sizeDoublePtr,
4702 marshal: appendDoublePtr,
4703 unmarshal: consumeDoublePtr,
Damien Neile8e88752020-02-11 11:25:16 -08004704 merge: mergeFloat64Ptr,
Damien Neilc37adef2019-04-01 13:49:56 -07004705}
4706
4707// sizeDoubleSlice returns the size of wire encoding a []float64 pointer as a repeated Double.
Damien Neil316febd2020-02-09 12:26:50 -08004708func sizeDoubleSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004709 s := *p.Float64Slice()
Damien Neil316febd2020-02-09 12:26:50 -08004710 size = len(s) * (f.tagsize + wire.SizeFixed64())
Damien Neilc37adef2019-04-01 13:49:56 -07004711 return size
4712}
4713
4714// appendDoubleSlice encodes a []float64 pointer as a repeated Double.
Damien Neil316febd2020-02-09 12:26:50 -08004715func appendDoubleSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004716 s := *p.Float64Slice()
4717 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08004718 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004719 b = wire.AppendFixed64(b, math.Float64bits(v))
4720 }
4721 return b, nil
4722}
4723
Damien Neile91877d2019-06-27 10:54:42 -07004724// consumeDoubleSlice wire decodes a []float64 pointer as a repeated Double.
Damien Neil316febd2020-02-09 12:26:50 -08004725func consumeDoubleSlice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004726 sp := p.Float64Slice()
4727 if wtyp == wire.BytesType {
4728 s := *sp
Damien Neilf0831e82020-01-21 14:25:12 -08004729 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07004730 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004731 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004732 }
4733 for len(b) > 0 {
4734 v, n := wire.ConsumeFixed64(b)
4735 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004736 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004737 }
4738 s = append(s, math.Float64frombits(v))
4739 b = b[n:]
4740 }
4741 *sp = s
Damien Neilf0831e82020-01-21 14:25:12 -08004742 out.n = n
4743 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004744 }
4745 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004746 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004747 }
4748 v, n := wire.ConsumeFixed64(b)
4749 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004750 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004751 }
4752 *sp = append(*sp, math.Float64frombits(v))
Damien Neilf0831e82020-01-21 14:25:12 -08004753 out.n = n
4754 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004755}
4756
Damien Neilc37adef2019-04-01 13:49:56 -07004757var coderDoubleSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004758 size: sizeDoubleSlice,
4759 marshal: appendDoubleSlice,
4760 unmarshal: consumeDoubleSlice,
Damien Neile8e88752020-02-11 11:25:16 -08004761 merge: mergeFloat64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07004762}
4763
4764// sizeDoublePackedSlice returns the size of wire encoding a []float64 pointer as a packed repeated Double.
Damien Neil316febd2020-02-09 12:26:50 -08004765func sizeDoublePackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004766 s := *p.Float64Slice()
4767 if len(s) == 0 {
4768 return 0
4769 }
4770 n := len(s) * wire.SizeFixed64()
Damien Neil316febd2020-02-09 12:26:50 -08004771 return f.tagsize + wire.SizeBytes(n)
Damien Neilc37adef2019-04-01 13:49:56 -07004772}
4773
4774// appendDoublePackedSlice encodes a []float64 pointer as a packed repeated Double.
Damien Neil316febd2020-02-09 12:26:50 -08004775func appendDoublePackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004776 s := *p.Float64Slice()
4777 if len(s) == 0 {
4778 return b, nil
4779 }
Damien Neil316febd2020-02-09 12:26:50 -08004780 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07004781 n := len(s) * wire.SizeFixed64()
4782 b = wire.AppendVarint(b, uint64(n))
4783 for _, v := range s {
4784 b = wire.AppendFixed64(b, math.Float64bits(v))
4785 }
4786 return b, nil
4787}
4788
4789var coderDoublePackedSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004790 size: sizeDoublePackedSlice,
4791 marshal: appendDoublePackedSlice,
4792 unmarshal: consumeDoubleSlice,
Damien Neile8e88752020-02-11 11:25:16 -08004793 merge: mergeFloat64Slice,
Damien Neilc37adef2019-04-01 13:49:56 -07004794}
4795
Damien Neil68b81c32019-08-22 11:41:32 -07004796// sizeDoubleValue returns the size of wire encoding a float64 value as a Double.
4797func sizeDoubleValue(v protoreflect.Value, tagsize int, _ marshalOptions) int {
Damien Neilc37adef2019-04-01 13:49:56 -07004798 return tagsize + wire.SizeFixed64()
4799}
4800
Damien Neil68b81c32019-08-22 11:41:32 -07004801// appendDoubleValue encodes a float64 value as a Double.
4802func appendDoubleValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004803 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07004804 b = wire.AppendFixed64(b, math.Float64bits(v.Float()))
Damien Neilc37adef2019-04-01 13:49:56 -07004805 return b, nil
4806}
4807
Damien Neil68b81c32019-08-22 11:41:32 -07004808// consumeDoubleValue decodes a float64 value as a Double.
Damien Neilf0831e82020-01-21 14:25:12 -08004809func consumeDoubleValue(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004810 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004811 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004812 }
4813 v, n := wire.ConsumeFixed64(b)
4814 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004815 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004816 }
Damien Neilf0831e82020-01-21 14:25:12 -08004817 out.n = n
4818 return protoreflect.ValueOfFloat64(math.Float64frombits(v)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004819}
4820
Damien Neil68b81c32019-08-22 11:41:32 -07004821var coderDoubleValue = valueCoderFuncs{
4822 size: sizeDoubleValue,
4823 marshal: appendDoubleValue,
4824 unmarshal: consumeDoubleValue,
Damien Neile8e88752020-02-11 11:25:16 -08004825 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07004826}
4827
Damien Neil68b81c32019-08-22 11:41:32 -07004828// sizeDoubleSliceValue returns the size of wire encoding a []float64 value as a repeated Double.
4829func sizeDoubleSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
4830 list := listv.List()
4831 size = list.Len() * (tagsize + wire.SizeFixed64())
Damien Neilc37adef2019-04-01 13:49:56 -07004832 return size
4833}
4834
Damien Neil68b81c32019-08-22 11:41:32 -07004835// appendDoubleSliceValue encodes a []float64 value as a repeated Double.
4836func appendDoubleSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
4837 list := listv.List()
4838 for i, llen := 0, list.Len(); i < llen; i++ {
4839 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07004840 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07004841 b = wire.AppendFixed64(b, math.Float64bits(v.Float()))
Damien Neilc37adef2019-04-01 13:49:56 -07004842 }
4843 return b, nil
4844}
4845
Damien Neil68b81c32019-08-22 11:41:32 -07004846// consumeDoubleSliceValue wire decodes a []float64 value as a repeated Double.
Damien Neilf0831e82020-01-21 14:25:12 -08004847func consumeDoubleSliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07004848 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07004849 if wtyp == wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08004850 b, n := wire.ConsumeBytes(b)
Damien Neile91877d2019-06-27 10:54:42 -07004851 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004852 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004853 }
4854 for len(b) > 0 {
4855 v, n := wire.ConsumeFixed64(b)
4856 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004857 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004858 }
Damien Neil68b81c32019-08-22 11:41:32 -07004859 list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
Damien Neile91877d2019-06-27 10:54:42 -07004860 b = b[n:]
4861 }
Damien Neilf0831e82020-01-21 14:25:12 -08004862 out.n = n
4863 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004864 }
4865 if wtyp != wire.Fixed64Type {
Damien Neilf0831e82020-01-21 14:25:12 -08004866 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004867 }
4868 v, n := wire.ConsumeFixed64(b)
4869 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004870 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004871 }
Damien Neil68b81c32019-08-22 11:41:32 -07004872 list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
Damien Neilf0831e82020-01-21 14:25:12 -08004873 out.n = n
4874 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004875}
4876
Damien Neil68b81c32019-08-22 11:41:32 -07004877var coderDoubleSliceValue = valueCoderFuncs{
4878 size: sizeDoubleSliceValue,
4879 marshal: appendDoubleSliceValue,
4880 unmarshal: consumeDoubleSliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08004881 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07004882}
4883
Damien Neil68b81c32019-08-22 11:41:32 -07004884// sizeDoublePackedSliceValue returns the size of wire encoding a []float64 value as a packed repeated Double.
4885func sizeDoublePackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
4886 list := listv.List()
Damien Neil2c0824b2019-12-20 12:21:25 -08004887 llen := list.Len()
4888 if llen == 0 {
4889 return 0
4890 }
4891 n := llen * wire.SizeFixed64()
Damien Neil7492a092019-07-10 15:23:29 -07004892 return tagsize + wire.SizeBytes(n)
4893}
4894
Damien Neil68b81c32019-08-22 11:41:32 -07004895// appendDoublePackedSliceValue encodes a []float64 value as a packed repeated Double.
4896func appendDoublePackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
4897 list := listv.List()
4898 llen := list.Len()
4899 if llen == 0 {
Damien Neil7492a092019-07-10 15:23:29 -07004900 return b, nil
4901 }
4902 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07004903 n := llen * wire.SizeFixed64()
Damien Neil7492a092019-07-10 15:23:29 -07004904 b = wire.AppendVarint(b, uint64(n))
Damien Neil68b81c32019-08-22 11:41:32 -07004905 for i := 0; i < llen; i++ {
4906 v := list.Get(i)
4907 b = wire.AppendFixed64(b, math.Float64bits(v.Float()))
Damien Neil7492a092019-07-10 15:23:29 -07004908 }
4909 return b, nil
4910}
4911
Damien Neil68b81c32019-08-22 11:41:32 -07004912var coderDoublePackedSliceValue = valueCoderFuncs{
4913 size: sizeDoublePackedSliceValue,
4914 marshal: appendDoublePackedSliceValue,
4915 unmarshal: consumeDoubleSliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08004916 merge: mergeListValue,
Damien Neil7492a092019-07-10 15:23:29 -07004917}
4918
Damien Neilc37adef2019-04-01 13:49:56 -07004919// sizeString returns the size of wire encoding a string pointer as a String.
Damien Neil316febd2020-02-09 12:26:50 -08004920func sizeString(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004921 v := *p.String()
Damien Neil316febd2020-02-09 12:26:50 -08004922 return f.tagsize + wire.SizeBytes(len(v))
Damien Neilc37adef2019-04-01 13:49:56 -07004923}
4924
4925// appendString wire encodes a string pointer as a String.
Damien Neil316febd2020-02-09 12:26:50 -08004926func appendString(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07004927 v := *p.String()
Damien Neil316febd2020-02-09 12:26:50 -08004928 b = wire.AppendVarint(b, f.wiretag)
Damien Neilcedb5952019-06-21 12:04:07 -07004929 b = wire.AppendString(b, v)
Damien Neilc37adef2019-04-01 13:49:56 -07004930 return b, nil
4931}
4932
Damien Neile91877d2019-06-27 10:54:42 -07004933// consumeString wire decodes a string pointer as a String.
Damien Neil316febd2020-02-09 12:26:50 -08004934func consumeString(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07004935 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08004936 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07004937 }
4938 v, n := wire.ConsumeString(b)
4939 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004940 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07004941 }
4942 *p.String() = v
Damien Neilf0831e82020-01-21 14:25:12 -08004943 out.n = n
4944 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07004945}
4946
Damien Neilc37adef2019-04-01 13:49:56 -07004947var coderString = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07004948 size: sizeString,
4949 marshal: appendString,
4950 unmarshal: consumeString,
Damien Neile8e88752020-02-11 11:25:16 -08004951 merge: mergeString,
Damien Neilc37adef2019-04-01 13:49:56 -07004952}
4953
Joe Tsaic51e2e02019-07-13 00:44:41 -07004954// appendStringValidateUTF8 wire encodes a string pointer as a String.
Damien Neil316febd2020-02-09 12:26:50 -08004955func appendStringValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07004956 v := *p.String()
Damien Neil316febd2020-02-09 12:26:50 -08004957 b = wire.AppendVarint(b, f.wiretag)
Joe Tsaic51e2e02019-07-13 00:44:41 -07004958 b = wire.AppendString(b, v)
4959 if !utf8.ValidString(v) {
4960 return b, errInvalidUTF8{}
4961 }
4962 return b, nil
4963}
4964
4965// consumeStringValidateUTF8 wire decodes a string pointer as a String.
Damien Neil316febd2020-02-09 12:26:50 -08004966func consumeStringValidateUTF8(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07004967 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08004968 return out, errUnknown
Joe Tsaic51e2e02019-07-13 00:44:41 -07004969 }
4970 v, n := wire.ConsumeString(b)
4971 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08004972 return out, wire.ParseError(n)
Joe Tsaic51e2e02019-07-13 00:44:41 -07004973 }
4974 if !utf8.ValidString(v) {
Damien Neilf0831e82020-01-21 14:25:12 -08004975 return out, errInvalidUTF8{}
Joe Tsaic51e2e02019-07-13 00:44:41 -07004976 }
4977 *p.String() = v
Damien Neilf0831e82020-01-21 14:25:12 -08004978 out.n = n
4979 return out, nil
Joe Tsaic51e2e02019-07-13 00:44:41 -07004980}
4981
4982var coderStringValidateUTF8 = pointerCoderFuncs{
4983 size: sizeString,
4984 marshal: appendStringValidateUTF8,
4985 unmarshal: consumeStringValidateUTF8,
Damien Neile8e88752020-02-11 11:25:16 -08004986 merge: mergeString,
Joe Tsaic51e2e02019-07-13 00:44:41 -07004987}
4988
4989// sizeStringNoZero returns the size of wire encoding a string pointer as a String.
Damien Neilc37adef2019-04-01 13:49:56 -07004990// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08004991func sizeStringNoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07004992 v := *p.String()
4993 if len(v) == 0 {
4994 return 0
4995 }
Damien Neil316febd2020-02-09 12:26:50 -08004996 return f.tagsize + wire.SizeBytes(len(v))
Damien Neilc37adef2019-04-01 13:49:56 -07004997}
4998
Joe Tsaic51e2e02019-07-13 00:44:41 -07004999// appendStringNoZero wire encodes a string pointer as a String.
Damien Neilc37adef2019-04-01 13:49:56 -07005000// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08005001func appendStringNoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07005002 v := *p.String()
5003 if len(v) == 0 {
5004 return b, nil
5005 }
Damien Neil316febd2020-02-09 12:26:50 -08005006 b = wire.AppendVarint(b, f.wiretag)
Damien Neilcedb5952019-06-21 12:04:07 -07005007 b = wire.AppendString(b, v)
Damien Neilc37adef2019-04-01 13:49:56 -07005008 return b, nil
5009}
5010
5011var coderStringNoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07005012 size: sizeStringNoZero,
5013 marshal: appendStringNoZero,
5014 unmarshal: consumeString,
Damien Neile8e88752020-02-11 11:25:16 -08005015 merge: mergeStringNoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07005016}
5017
Joe Tsaic51e2e02019-07-13 00:44:41 -07005018// appendStringNoZeroValidateUTF8 wire encodes a string pointer as a String.
5019// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08005020func appendStringNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005021 v := *p.String()
5022 if len(v) == 0 {
5023 return b, nil
5024 }
Damien Neil316febd2020-02-09 12:26:50 -08005025 b = wire.AppendVarint(b, f.wiretag)
Joe Tsaic51e2e02019-07-13 00:44:41 -07005026 b = wire.AppendString(b, v)
5027 if !utf8.ValidString(v) {
5028 return b, errInvalidUTF8{}
5029 }
5030 return b, nil
5031}
5032
5033var coderStringNoZeroValidateUTF8 = pointerCoderFuncs{
5034 size: sizeStringNoZero,
5035 marshal: appendStringNoZeroValidateUTF8,
5036 unmarshal: consumeStringValidateUTF8,
Damien Neile8e88752020-02-11 11:25:16 -08005037 merge: mergeStringNoZero,
Joe Tsaic51e2e02019-07-13 00:44:41 -07005038}
5039
Damien Neilc37adef2019-04-01 13:49:56 -07005040// sizeStringPtr returns the size of wire encoding a *string pointer as a String.
5041// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08005042func sizeStringPtr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07005043 v := **p.StringPtr()
Damien Neil316febd2020-02-09 12:26:50 -08005044 return f.tagsize + wire.SizeBytes(len(v))
Damien Neilc37adef2019-04-01 13:49:56 -07005045}
5046
Damien Neile91877d2019-06-27 10:54:42 -07005047// appendStringPtr wire encodes a *string pointer as a String.
Damien Neilc37adef2019-04-01 13:49:56 -07005048// It panics if the pointer is nil.
Damien Neil316febd2020-02-09 12:26:50 -08005049func appendStringPtr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07005050 v := **p.StringPtr()
Damien Neil316febd2020-02-09 12:26:50 -08005051 b = wire.AppendVarint(b, f.wiretag)
Damien Neilcedb5952019-06-21 12:04:07 -07005052 b = wire.AppendString(b, v)
Damien Neilc37adef2019-04-01 13:49:56 -07005053 return b, nil
5054}
5055
Damien Neile91877d2019-06-27 10:54:42 -07005056// consumeStringPtr wire decodes a *string pointer as a String.
Damien Neil316febd2020-02-09 12:26:50 -08005057func consumeStringPtr(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07005058 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005059 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07005060 }
5061 v, n := wire.ConsumeString(b)
5062 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005063 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07005064 }
5065 vp := p.StringPtr()
5066 if *vp == nil {
5067 *vp = new(string)
5068 }
5069 **vp = v
Damien Neilf0831e82020-01-21 14:25:12 -08005070 out.n = n
5071 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07005072}
5073
Damien Neilc37adef2019-04-01 13:49:56 -07005074var coderStringPtr = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07005075 size: sizeStringPtr,
5076 marshal: appendStringPtr,
5077 unmarshal: consumeStringPtr,
Damien Neile8e88752020-02-11 11:25:16 -08005078 merge: mergeStringPtr,
Damien Neilc37adef2019-04-01 13:49:56 -07005079}
5080
5081// sizeStringSlice returns the size of wire encoding a []string pointer as a repeated String.
Damien Neil316febd2020-02-09 12:26:50 -08005082func sizeStringSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07005083 s := *p.StringSlice()
5084 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08005085 size += f.tagsize + wire.SizeBytes(len(v))
Damien Neilc37adef2019-04-01 13:49:56 -07005086 }
5087 return size
5088}
5089
5090// appendStringSlice encodes a []string pointer as a repeated String.
Damien Neil316febd2020-02-09 12:26:50 -08005091func appendStringSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07005092 s := *p.StringSlice()
5093 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08005094 b = wire.AppendVarint(b, f.wiretag)
Damien Neilcedb5952019-06-21 12:04:07 -07005095 b = wire.AppendString(b, v)
Damien Neilc37adef2019-04-01 13:49:56 -07005096 }
5097 return b, nil
5098}
5099
Damien Neile91877d2019-06-27 10:54:42 -07005100// consumeStringSlice wire decodes a []string pointer as a repeated String.
Damien Neil316febd2020-02-09 12:26:50 -08005101func consumeStringSlice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07005102 sp := p.StringSlice()
5103 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005104 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07005105 }
5106 v, n := wire.ConsumeString(b)
5107 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005108 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07005109 }
5110 *sp = append(*sp, v)
Damien Neilf0831e82020-01-21 14:25:12 -08005111 out.n = n
5112 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07005113}
5114
Damien Neilc37adef2019-04-01 13:49:56 -07005115var coderStringSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07005116 size: sizeStringSlice,
5117 marshal: appendStringSlice,
5118 unmarshal: consumeStringSlice,
Damien Neile8e88752020-02-11 11:25:16 -08005119 merge: mergeStringSlice,
Damien Neilc37adef2019-04-01 13:49:56 -07005120}
5121
Joe Tsaic51e2e02019-07-13 00:44:41 -07005122// appendStringSliceValidateUTF8 encodes a []string pointer as a repeated String.
Damien Neil316febd2020-02-09 12:26:50 -08005123func appendStringSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005124 s := *p.StringSlice()
5125 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08005126 b = wire.AppendVarint(b, f.wiretag)
Joe Tsaic51e2e02019-07-13 00:44:41 -07005127 b = wire.AppendString(b, v)
5128 if !utf8.ValidString(v) {
5129 return b, errInvalidUTF8{}
5130 }
5131 }
5132 return b, nil
5133}
5134
5135// consumeStringSliceValidateUTF8 wire decodes a []string pointer as a repeated String.
Damien Neil316febd2020-02-09 12:26:50 -08005136func consumeStringSliceValidateUTF8(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005137 sp := p.StringSlice()
5138 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005139 return out, errUnknown
Joe Tsaic51e2e02019-07-13 00:44:41 -07005140 }
5141 v, n := wire.ConsumeString(b)
5142 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005143 return out, wire.ParseError(n)
Joe Tsaic51e2e02019-07-13 00:44:41 -07005144 }
5145 if !utf8.ValidString(v) {
Damien Neilf0831e82020-01-21 14:25:12 -08005146 return out, errInvalidUTF8{}
Joe Tsaic51e2e02019-07-13 00:44:41 -07005147 }
5148 *sp = append(*sp, v)
Damien Neilf0831e82020-01-21 14:25:12 -08005149 out.n = n
5150 return out, nil
Joe Tsaic51e2e02019-07-13 00:44:41 -07005151}
5152
5153var coderStringSliceValidateUTF8 = pointerCoderFuncs{
5154 size: sizeStringSlice,
5155 marshal: appendStringSliceValidateUTF8,
5156 unmarshal: consumeStringSliceValidateUTF8,
Damien Neile8e88752020-02-11 11:25:16 -08005157 merge: mergeStringSlice,
Joe Tsaic51e2e02019-07-13 00:44:41 -07005158}
5159
Damien Neil68b81c32019-08-22 11:41:32 -07005160// sizeStringValue returns the size of wire encoding a string value as a String.
5161func sizeStringValue(v protoreflect.Value, tagsize int, _ marshalOptions) int {
5162 return tagsize + wire.SizeBytes(len(v.String()))
Damien Neilc37adef2019-04-01 13:49:56 -07005163}
5164
Damien Neil68b81c32019-08-22 11:41:32 -07005165// appendStringValue encodes a string value as a String.
5166func appendStringValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07005167 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07005168 b = wire.AppendString(b, v.String())
Damien Neilc37adef2019-04-01 13:49:56 -07005169 return b, nil
5170}
5171
Damien Neil68b81c32019-08-22 11:41:32 -07005172// consumeStringValue decodes a string value as a String.
Damien Neilf0831e82020-01-21 14:25:12 -08005173func consumeStringValue(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07005174 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005175 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07005176 }
5177 v, n := wire.ConsumeString(b)
5178 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005179 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07005180 }
Damien Neilf0831e82020-01-21 14:25:12 -08005181 out.n = n
5182 return protoreflect.ValueOfString(string(v)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07005183}
5184
Damien Neil68b81c32019-08-22 11:41:32 -07005185var coderStringValue = valueCoderFuncs{
5186 size: sizeStringValue,
5187 marshal: appendStringValue,
5188 unmarshal: consumeStringValue,
Damien Neile8e88752020-02-11 11:25:16 -08005189 merge: mergeScalarValue,
Damien Neilc37adef2019-04-01 13:49:56 -07005190}
5191
Damien Neil68b81c32019-08-22 11:41:32 -07005192// appendStringValueValidateUTF8 encodes a string value as a String.
5193func appendStringValueValidateUTF8(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005194 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07005195 b = wire.AppendString(b, v.String())
5196 if !utf8.ValidString(v.String()) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005197 return b, errInvalidUTF8{}
5198 }
5199 return b, nil
5200}
5201
Damien Neil68b81c32019-08-22 11:41:32 -07005202// consumeStringValueValidateUTF8 decodes a string value as a String.
Damien Neilf0831e82020-01-21 14:25:12 -08005203func consumeStringValueValidateUTF8(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005204 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005205 return protoreflect.Value{}, out, errUnknown
Joe Tsaic51e2e02019-07-13 00:44:41 -07005206 }
5207 v, n := wire.ConsumeString(b)
5208 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005209 return protoreflect.Value{}, out, wire.ParseError(n)
Joe Tsaic51e2e02019-07-13 00:44:41 -07005210 }
5211 if !utf8.ValidString(v) {
Damien Neilf0831e82020-01-21 14:25:12 -08005212 return protoreflect.Value{}, out, errInvalidUTF8{}
Joe Tsaic51e2e02019-07-13 00:44:41 -07005213 }
Damien Neilf0831e82020-01-21 14:25:12 -08005214 out.n = n
5215 return protoreflect.ValueOfString(string(v)), out, nil
Joe Tsaic51e2e02019-07-13 00:44:41 -07005216}
5217
Damien Neil68b81c32019-08-22 11:41:32 -07005218var coderStringValueValidateUTF8 = valueCoderFuncs{
5219 size: sizeStringValue,
5220 marshal: appendStringValueValidateUTF8,
5221 unmarshal: consumeStringValueValidateUTF8,
Damien Neile8e88752020-02-11 11:25:16 -08005222 merge: mergeScalarValue,
Joe Tsaic51e2e02019-07-13 00:44:41 -07005223}
5224
Damien Neil68b81c32019-08-22 11:41:32 -07005225// sizeStringSliceValue returns the size of wire encoding a []string value as a repeated String.
5226func sizeStringSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
5227 list := listv.List()
5228 for i, llen := 0, list.Len(); i < llen; i++ {
5229 v := list.Get(i)
5230 size += tagsize + wire.SizeBytes(len(v.String()))
Damien Neilc37adef2019-04-01 13:49:56 -07005231 }
5232 return size
5233}
5234
Damien Neil68b81c32019-08-22 11:41:32 -07005235// appendStringSliceValue encodes a []string value as a repeated String.
5236func appendStringSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
5237 list := listv.List()
5238 for i, llen := 0, list.Len(); i < llen; i++ {
5239 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07005240 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07005241 b = wire.AppendString(b, v.String())
Damien Neilc37adef2019-04-01 13:49:56 -07005242 }
5243 return b, nil
5244}
5245
Damien Neil68b81c32019-08-22 11:41:32 -07005246// consumeStringSliceValue wire decodes a []string value as a repeated String.
Damien Neilf0831e82020-01-21 14:25:12 -08005247func consumeStringSliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07005248 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07005249 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005250 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07005251 }
5252 v, n := wire.ConsumeString(b)
5253 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005254 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07005255 }
Damien Neil68b81c32019-08-22 11:41:32 -07005256 list.Append(protoreflect.ValueOfString(string(v)))
Damien Neilf0831e82020-01-21 14:25:12 -08005257 out.n = n
5258 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07005259}
5260
Damien Neil68b81c32019-08-22 11:41:32 -07005261var coderStringSliceValue = valueCoderFuncs{
5262 size: sizeStringSliceValue,
5263 marshal: appendStringSliceValue,
5264 unmarshal: consumeStringSliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08005265 merge: mergeListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07005266}
5267
5268// sizeBytes returns the size of wire encoding a []byte pointer as a Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005269func sizeBytes(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07005270 v := *p.Bytes()
Damien Neil316febd2020-02-09 12:26:50 -08005271 return f.tagsize + wire.SizeBytes(len(v))
Damien Neilc37adef2019-04-01 13:49:56 -07005272}
5273
5274// appendBytes wire encodes a []byte pointer as a Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005275func appendBytes(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07005276 v := *p.Bytes()
Damien Neil316febd2020-02-09 12:26:50 -08005277 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07005278 b = wire.AppendBytes(b, v)
5279 return b, nil
5280}
5281
Damien Neile91877d2019-06-27 10:54:42 -07005282// consumeBytes wire decodes a []byte pointer as a Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005283func consumeBytes(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07005284 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005285 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07005286 }
5287 v, n := wire.ConsumeBytes(b)
5288 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005289 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07005290 }
Damien Neil8003f082019-08-02 15:13:00 -07005291 *p.Bytes() = append(emptyBuf[:], v...)
Damien Neilf0831e82020-01-21 14:25:12 -08005292 out.n = n
5293 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07005294}
5295
Damien Neilc37adef2019-04-01 13:49:56 -07005296var coderBytes = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07005297 size: sizeBytes,
5298 marshal: appendBytes,
5299 unmarshal: consumeBytes,
Damien Neile8e88752020-02-11 11:25:16 -08005300 merge: mergeBytes,
Damien Neilc37adef2019-04-01 13:49:56 -07005301}
5302
Joe Tsaic51e2e02019-07-13 00:44:41 -07005303// appendBytesValidateUTF8 wire encodes a []byte pointer as a Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005304func appendBytesValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005305 v := *p.Bytes()
Damien Neil316febd2020-02-09 12:26:50 -08005306 b = wire.AppendVarint(b, f.wiretag)
Joe Tsaic51e2e02019-07-13 00:44:41 -07005307 b = wire.AppendBytes(b, v)
5308 if !utf8.Valid(v) {
5309 return b, errInvalidUTF8{}
5310 }
5311 return b, nil
5312}
5313
5314// consumeBytesValidateUTF8 wire decodes a []byte pointer as a Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005315func consumeBytesValidateUTF8(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005316 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005317 return out, errUnknown
Joe Tsaic51e2e02019-07-13 00:44:41 -07005318 }
5319 v, n := wire.ConsumeBytes(b)
5320 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005321 return out, wire.ParseError(n)
Joe Tsaic51e2e02019-07-13 00:44:41 -07005322 }
5323 if !utf8.Valid(v) {
Damien Neilf0831e82020-01-21 14:25:12 -08005324 return out, errInvalidUTF8{}
Joe Tsaic51e2e02019-07-13 00:44:41 -07005325 }
Damien Neil8003f082019-08-02 15:13:00 -07005326 *p.Bytes() = append(emptyBuf[:], v...)
Damien Neilf0831e82020-01-21 14:25:12 -08005327 out.n = n
5328 return out, nil
Joe Tsaic51e2e02019-07-13 00:44:41 -07005329}
5330
5331var coderBytesValidateUTF8 = pointerCoderFuncs{
5332 size: sizeBytes,
5333 marshal: appendBytesValidateUTF8,
5334 unmarshal: consumeBytesValidateUTF8,
Damien Neile8e88752020-02-11 11:25:16 -08005335 merge: mergeBytes,
Joe Tsaic51e2e02019-07-13 00:44:41 -07005336}
5337
5338// sizeBytesNoZero returns the size of wire encoding a []byte pointer as a Bytes.
Damien Neilc37adef2019-04-01 13:49:56 -07005339// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08005340func sizeBytesNoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07005341 v := *p.Bytes()
5342 if len(v) == 0 {
5343 return 0
5344 }
Damien Neil316febd2020-02-09 12:26:50 -08005345 return f.tagsize + wire.SizeBytes(len(v))
Damien Neilc37adef2019-04-01 13:49:56 -07005346}
5347
Joe Tsaic51e2e02019-07-13 00:44:41 -07005348// appendBytesNoZero wire encodes a []byte pointer as a Bytes.
Damien Neilc37adef2019-04-01 13:49:56 -07005349// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08005350func appendBytesNoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07005351 v := *p.Bytes()
5352 if len(v) == 0 {
5353 return b, nil
5354 }
Damien Neil316febd2020-02-09 12:26:50 -08005355 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07005356 b = wire.AppendBytes(b, v)
5357 return b, nil
5358}
5359
Damien Neil8003f082019-08-02 15:13:00 -07005360// consumeBytesNoZero wire decodes a []byte pointer as a Bytes.
5361// The zero value is not decoded.
Damien Neil316febd2020-02-09 12:26:50 -08005362func consumeBytesNoZero(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neil8003f082019-08-02 15:13:00 -07005363 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005364 return out, errUnknown
Damien Neil8003f082019-08-02 15:13:00 -07005365 }
5366 v, n := wire.ConsumeBytes(b)
5367 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005368 return out, wire.ParseError(n)
Damien Neil8003f082019-08-02 15:13:00 -07005369 }
5370 *p.Bytes() = append(([]byte)(nil), v...)
Damien Neilf0831e82020-01-21 14:25:12 -08005371 out.n = n
5372 return out, nil
Damien Neil8003f082019-08-02 15:13:00 -07005373}
5374
Damien Neilc37adef2019-04-01 13:49:56 -07005375var coderBytesNoZero = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07005376 size: sizeBytesNoZero,
5377 marshal: appendBytesNoZero,
Damien Neil8003f082019-08-02 15:13:00 -07005378 unmarshal: consumeBytesNoZero,
Damien Neile8e88752020-02-11 11:25:16 -08005379 merge: mergeBytesNoZero,
Damien Neilc37adef2019-04-01 13:49:56 -07005380}
5381
Joe Tsaic51e2e02019-07-13 00:44:41 -07005382// appendBytesNoZeroValidateUTF8 wire encodes a []byte pointer as a Bytes.
5383// The zero value is not encoded.
Damien Neil316febd2020-02-09 12:26:50 -08005384func appendBytesNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005385 v := *p.Bytes()
5386 if len(v) == 0 {
5387 return b, nil
5388 }
Damien Neil316febd2020-02-09 12:26:50 -08005389 b = wire.AppendVarint(b, f.wiretag)
Joe Tsaic51e2e02019-07-13 00:44:41 -07005390 b = wire.AppendBytes(b, v)
5391 if !utf8.Valid(v) {
5392 return b, errInvalidUTF8{}
5393 }
5394 return b, nil
5395}
5396
Damien Neil8003f082019-08-02 15:13:00 -07005397// consumeBytesNoZeroValidateUTF8 wire decodes a []byte pointer as a Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005398func consumeBytesNoZeroValidateUTF8(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neil8003f082019-08-02 15:13:00 -07005399 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005400 return out, errUnknown
Damien Neil8003f082019-08-02 15:13:00 -07005401 }
5402 v, n := wire.ConsumeBytes(b)
5403 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005404 return out, wire.ParseError(n)
Damien Neil8003f082019-08-02 15:13:00 -07005405 }
5406 if !utf8.Valid(v) {
Damien Neilf0831e82020-01-21 14:25:12 -08005407 return out, errInvalidUTF8{}
Damien Neil8003f082019-08-02 15:13:00 -07005408 }
5409 *p.Bytes() = append(([]byte)(nil), v...)
Damien Neilf0831e82020-01-21 14:25:12 -08005410 out.n = n
5411 return out, nil
Damien Neil8003f082019-08-02 15:13:00 -07005412}
5413
Joe Tsaic51e2e02019-07-13 00:44:41 -07005414var coderBytesNoZeroValidateUTF8 = pointerCoderFuncs{
5415 size: sizeBytesNoZero,
5416 marshal: appendBytesNoZeroValidateUTF8,
Damien Neil8003f082019-08-02 15:13:00 -07005417 unmarshal: consumeBytesNoZeroValidateUTF8,
Damien Neile8e88752020-02-11 11:25:16 -08005418 merge: mergeBytesNoZero,
Joe Tsaic51e2e02019-07-13 00:44:41 -07005419}
5420
Damien Neilc37adef2019-04-01 13:49:56 -07005421// sizeBytesSlice returns the size of wire encoding a [][]byte pointer as a repeated Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005422func sizeBytesSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
Damien Neilc37adef2019-04-01 13:49:56 -07005423 s := *p.BytesSlice()
5424 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08005425 size += f.tagsize + wire.SizeBytes(len(v))
Damien Neilc37adef2019-04-01 13:49:56 -07005426 }
5427 return size
5428}
5429
5430// appendBytesSlice encodes a [][]byte pointer as a repeated Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005431func appendBytesSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07005432 s := *p.BytesSlice()
5433 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08005434 b = wire.AppendVarint(b, f.wiretag)
Damien Neilc37adef2019-04-01 13:49:56 -07005435 b = wire.AppendBytes(b, v)
5436 }
5437 return b, nil
5438}
5439
Damien Neile91877d2019-06-27 10:54:42 -07005440// consumeBytesSlice wire decodes a [][]byte pointer as a repeated Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005441func consumeBytesSlice(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07005442 sp := p.BytesSlice()
5443 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005444 return out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07005445 }
5446 v, n := wire.ConsumeBytes(b)
5447 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005448 return out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07005449 }
Damien Neil8003f082019-08-02 15:13:00 -07005450 *sp = append(*sp, append(emptyBuf[:], v...))
Damien Neilf0831e82020-01-21 14:25:12 -08005451 out.n = n
5452 return out, nil
Damien Neile91877d2019-06-27 10:54:42 -07005453}
5454
Damien Neilc37adef2019-04-01 13:49:56 -07005455var coderBytesSlice = pointerCoderFuncs{
Damien Neile91877d2019-06-27 10:54:42 -07005456 size: sizeBytesSlice,
5457 marshal: appendBytesSlice,
5458 unmarshal: consumeBytesSlice,
Damien Neile8e88752020-02-11 11:25:16 -08005459 merge: mergeBytesSlice,
Damien Neilc37adef2019-04-01 13:49:56 -07005460}
5461
Joe Tsaic51e2e02019-07-13 00:44:41 -07005462// appendBytesSliceValidateUTF8 encodes a [][]byte pointer as a repeated Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005463func appendBytesSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005464 s := *p.BytesSlice()
5465 for _, v := range s {
Damien Neil316febd2020-02-09 12:26:50 -08005466 b = wire.AppendVarint(b, f.wiretag)
Joe Tsaic51e2e02019-07-13 00:44:41 -07005467 b = wire.AppendBytes(b, v)
5468 if !utf8.Valid(v) {
5469 return b, errInvalidUTF8{}
5470 }
5471 }
5472 return b, nil
5473}
5474
5475// consumeBytesSliceValidateUTF8 wire decodes a [][]byte pointer as a repeated Bytes.
Damien Neil316febd2020-02-09 12:26:50 -08005476func consumeBytesSliceValidateUTF8(b []byte, p pointer, wtyp wire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
Joe Tsaic51e2e02019-07-13 00:44:41 -07005477 sp := p.BytesSlice()
5478 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005479 return out, errUnknown
Joe Tsaic51e2e02019-07-13 00:44:41 -07005480 }
5481 v, n := wire.ConsumeBytes(b)
5482 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005483 return out, wire.ParseError(n)
Joe Tsaic51e2e02019-07-13 00:44:41 -07005484 }
5485 if !utf8.Valid(v) {
Damien Neilf0831e82020-01-21 14:25:12 -08005486 return out, errInvalidUTF8{}
Joe Tsaic51e2e02019-07-13 00:44:41 -07005487 }
Damien Neil8003f082019-08-02 15:13:00 -07005488 *sp = append(*sp, append(emptyBuf[:], v...))
Damien Neilf0831e82020-01-21 14:25:12 -08005489 out.n = n
5490 return out, nil
Joe Tsaic51e2e02019-07-13 00:44:41 -07005491}
5492
5493var coderBytesSliceValidateUTF8 = pointerCoderFuncs{
5494 size: sizeBytesSlice,
5495 marshal: appendBytesSliceValidateUTF8,
5496 unmarshal: consumeBytesSliceValidateUTF8,
Damien Neile8e88752020-02-11 11:25:16 -08005497 merge: mergeBytesSlice,
Joe Tsaic51e2e02019-07-13 00:44:41 -07005498}
5499
Damien Neil68b81c32019-08-22 11:41:32 -07005500// sizeBytesValue returns the size of wire encoding a []byte value as a Bytes.
5501func sizeBytesValue(v protoreflect.Value, tagsize int, _ marshalOptions) int {
5502 return tagsize + wire.SizeBytes(len(v.Bytes()))
Damien Neilc37adef2019-04-01 13:49:56 -07005503}
5504
Damien Neil68b81c32019-08-22 11:41:32 -07005505// appendBytesValue encodes a []byte value as a Bytes.
5506func appendBytesValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
Damien Neilc37adef2019-04-01 13:49:56 -07005507 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07005508 b = wire.AppendBytes(b, v.Bytes())
Damien Neilc37adef2019-04-01 13:49:56 -07005509 return b, nil
5510}
5511
Damien Neil68b81c32019-08-22 11:41:32 -07005512// consumeBytesValue decodes a []byte value as a Bytes.
Damien Neilf0831e82020-01-21 14:25:12 -08005513func consumeBytesValue(b []byte, _ protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neile91877d2019-06-27 10:54:42 -07005514 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005515 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07005516 }
5517 v, n := wire.ConsumeBytes(b)
5518 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005519 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07005520 }
Damien Neilf0831e82020-01-21 14:25:12 -08005521 out.n = n
5522 return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), out, nil
Damien Neile91877d2019-06-27 10:54:42 -07005523}
5524
Damien Neil68b81c32019-08-22 11:41:32 -07005525var coderBytesValue = valueCoderFuncs{
5526 size: sizeBytesValue,
5527 marshal: appendBytesValue,
5528 unmarshal: consumeBytesValue,
Damien Neile8e88752020-02-11 11:25:16 -08005529 merge: mergeBytesValue,
Damien Neilc37adef2019-04-01 13:49:56 -07005530}
5531
Damien Neil68b81c32019-08-22 11:41:32 -07005532// sizeBytesSliceValue returns the size of wire encoding a [][]byte value as a repeated Bytes.
5533func sizeBytesSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) {
5534 list := listv.List()
5535 for i, llen := 0, list.Len(); i < llen; i++ {
5536 v := list.Get(i)
5537 size += tagsize + wire.SizeBytes(len(v.Bytes()))
Damien Neilc37adef2019-04-01 13:49:56 -07005538 }
5539 return size
5540}
5541
Damien Neil68b81c32019-08-22 11:41:32 -07005542// appendBytesSliceValue encodes a [][]byte value as a repeated Bytes.
5543func appendBytesSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) {
5544 list := listv.List()
5545 for i, llen := 0, list.Len(); i < llen; i++ {
5546 v := list.Get(i)
Damien Neilc37adef2019-04-01 13:49:56 -07005547 b = wire.AppendVarint(b, wiretag)
Damien Neil68b81c32019-08-22 11:41:32 -07005548 b = wire.AppendBytes(b, v.Bytes())
Damien Neilc37adef2019-04-01 13:49:56 -07005549 }
5550 return b, nil
5551}
5552
Damien Neil68b81c32019-08-22 11:41:32 -07005553// consumeBytesSliceValue wire decodes a [][]byte value as a repeated Bytes.
Damien Neilf0831e82020-01-21 14:25:12 -08005554func consumeBytesSliceValue(b []byte, listv protoreflect.Value, _ wire.Number, wtyp wire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
Damien Neil68b81c32019-08-22 11:41:32 -07005555 list := listv.List()
Damien Neile91877d2019-06-27 10:54:42 -07005556 if wtyp != wire.BytesType {
Damien Neilf0831e82020-01-21 14:25:12 -08005557 return protoreflect.Value{}, out, errUnknown
Damien Neile91877d2019-06-27 10:54:42 -07005558 }
5559 v, n := wire.ConsumeBytes(b)
5560 if n < 0 {
Damien Neilf0831e82020-01-21 14:25:12 -08005561 return protoreflect.Value{}, out, wire.ParseError(n)
Damien Neile91877d2019-06-27 10:54:42 -07005562 }
Damien Neil5366f822019-12-05 14:54:35 -08005563 list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...)))
Damien Neilf0831e82020-01-21 14:25:12 -08005564 out.n = n
5565 return listv, out, nil
Damien Neile91877d2019-06-27 10:54:42 -07005566}
5567
Damien Neil68b81c32019-08-22 11:41:32 -07005568var coderBytesSliceValue = valueCoderFuncs{
5569 size: sizeBytesSliceValue,
5570 marshal: appendBytesSliceValue,
5571 unmarshal: consumeBytesSliceValue,
Damien Neile8e88752020-02-11 11:25:16 -08005572 merge: mergeBytesListValue,
Damien Neilc37adef2019-04-01 13:49:56 -07005573}
5574
Damien Neil8003f082019-08-02 15:13:00 -07005575// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices.
5576var emptyBuf [0]byte
5577
Damien Neilc37adef2019-04-01 13:49:56 -07005578var wireTypes = map[protoreflect.Kind]wire.Type{
5579 protoreflect.BoolKind: wire.VarintType,
5580 protoreflect.EnumKind: wire.VarintType,
5581 protoreflect.Int32Kind: wire.VarintType,
5582 protoreflect.Sint32Kind: wire.VarintType,
5583 protoreflect.Uint32Kind: wire.VarintType,
5584 protoreflect.Int64Kind: wire.VarintType,
5585 protoreflect.Sint64Kind: wire.VarintType,
5586 protoreflect.Uint64Kind: wire.VarintType,
5587 protoreflect.Sfixed32Kind: wire.Fixed32Type,
5588 protoreflect.Fixed32Kind: wire.Fixed32Type,
5589 protoreflect.FloatKind: wire.Fixed32Type,
5590 protoreflect.Sfixed64Kind: wire.Fixed64Type,
5591 protoreflect.Fixed64Kind: wire.Fixed64Type,
5592 protoreflect.DoubleKind: wire.Fixed64Type,
5593 protoreflect.StringKind: wire.BytesType,
5594 protoreflect.BytesKind: wire.BytesType,
5595 protoreflect.MessageKind: wire.BytesType,
5596 protoreflect.GroupKind: wire.StartGroupType,
5597}