xref: /aosp_15_r20/external/golang-protobuf/proto/decode_gen.go (revision 1c12ee1efe575feb122dbf939ff15148a3b3e8f2)
1*1c12ee1eSDan Willemsen// Copyright 2018 The Go Authors. All rights reserved.
2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style
3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file.
4*1c12ee1eSDan Willemsen
5*1c12ee1eSDan Willemsen// Code generated by generate-types. DO NOT EDIT.
6*1c12ee1eSDan Willemsen
7*1c12ee1eSDan Willemsenpackage proto
8*1c12ee1eSDan Willemsen
9*1c12ee1eSDan Willemsenimport (
10*1c12ee1eSDan Willemsen	"math"
11*1c12ee1eSDan Willemsen	"unicode/utf8"
12*1c12ee1eSDan Willemsen
13*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/encoding/protowire"
14*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/internal/errors"
15*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/internal/strs"
16*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/reflect/protoreflect"
17*1c12ee1eSDan Willemsen)
18*1c12ee1eSDan Willemsen
19*1c12ee1eSDan Willemsen// unmarshalScalar decodes a value of the given kind.
20*1c12ee1eSDan Willemsen//
21*1c12ee1eSDan Willemsen// Message values are decoded into a []byte which aliases the input data.
22*1c12ee1eSDan Willemsenfunc (o UnmarshalOptions) unmarshalScalar(b []byte, wtyp protowire.Type, fd protoreflect.FieldDescriptor) (val protoreflect.Value, n int, err error) {
23*1c12ee1eSDan Willemsen	switch fd.Kind() {
24*1c12ee1eSDan Willemsen	case protoreflect.BoolKind:
25*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
26*1c12ee1eSDan Willemsen			return val, 0, errUnknown
27*1c12ee1eSDan Willemsen		}
28*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
29*1c12ee1eSDan Willemsen		if n < 0 {
30*1c12ee1eSDan Willemsen			return val, 0, errDecode
31*1c12ee1eSDan Willemsen		}
32*1c12ee1eSDan Willemsen		return protoreflect.ValueOfBool(protowire.DecodeBool(v)), n, nil
33*1c12ee1eSDan Willemsen	case protoreflect.EnumKind:
34*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
35*1c12ee1eSDan Willemsen			return val, 0, errUnknown
36*1c12ee1eSDan Willemsen		}
37*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
38*1c12ee1eSDan Willemsen		if n < 0 {
39*1c12ee1eSDan Willemsen			return val, 0, errDecode
40*1c12ee1eSDan Willemsen		}
41*1c12ee1eSDan Willemsen		return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), n, nil
42*1c12ee1eSDan Willemsen	case protoreflect.Int32Kind:
43*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
44*1c12ee1eSDan Willemsen			return val, 0, errUnknown
45*1c12ee1eSDan Willemsen		}
46*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
47*1c12ee1eSDan Willemsen		if n < 0 {
48*1c12ee1eSDan Willemsen			return val, 0, errDecode
49*1c12ee1eSDan Willemsen		}
50*1c12ee1eSDan Willemsen		return protoreflect.ValueOfInt32(int32(v)), n, nil
51*1c12ee1eSDan Willemsen	case protoreflect.Sint32Kind:
52*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
53*1c12ee1eSDan Willemsen			return val, 0, errUnknown
54*1c12ee1eSDan Willemsen		}
55*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
56*1c12ee1eSDan Willemsen		if n < 0 {
57*1c12ee1eSDan Willemsen			return val, 0, errDecode
58*1c12ee1eSDan Willemsen		}
59*1c12ee1eSDan Willemsen		return protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), n, nil
60*1c12ee1eSDan Willemsen	case protoreflect.Uint32Kind:
61*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
62*1c12ee1eSDan Willemsen			return val, 0, errUnknown
63*1c12ee1eSDan Willemsen		}
64*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
65*1c12ee1eSDan Willemsen		if n < 0 {
66*1c12ee1eSDan Willemsen			return val, 0, errDecode
67*1c12ee1eSDan Willemsen		}
68*1c12ee1eSDan Willemsen		return protoreflect.ValueOfUint32(uint32(v)), n, nil
69*1c12ee1eSDan Willemsen	case protoreflect.Int64Kind:
70*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
71*1c12ee1eSDan Willemsen			return val, 0, errUnknown
72*1c12ee1eSDan Willemsen		}
73*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
74*1c12ee1eSDan Willemsen		if n < 0 {
75*1c12ee1eSDan Willemsen			return val, 0, errDecode
76*1c12ee1eSDan Willemsen		}
77*1c12ee1eSDan Willemsen		return protoreflect.ValueOfInt64(int64(v)), n, nil
78*1c12ee1eSDan Willemsen	case protoreflect.Sint64Kind:
79*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
80*1c12ee1eSDan Willemsen			return val, 0, errUnknown
81*1c12ee1eSDan Willemsen		}
82*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
83*1c12ee1eSDan Willemsen		if n < 0 {
84*1c12ee1eSDan Willemsen			return val, 0, errDecode
85*1c12ee1eSDan Willemsen		}
86*1c12ee1eSDan Willemsen		return protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), n, nil
87*1c12ee1eSDan Willemsen	case protoreflect.Uint64Kind:
88*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
89*1c12ee1eSDan Willemsen			return val, 0, errUnknown
90*1c12ee1eSDan Willemsen		}
91*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
92*1c12ee1eSDan Willemsen		if n < 0 {
93*1c12ee1eSDan Willemsen			return val, 0, errDecode
94*1c12ee1eSDan Willemsen		}
95*1c12ee1eSDan Willemsen		return protoreflect.ValueOfUint64(v), n, nil
96*1c12ee1eSDan Willemsen	case protoreflect.Sfixed32Kind:
97*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed32Type {
98*1c12ee1eSDan Willemsen			return val, 0, errUnknown
99*1c12ee1eSDan Willemsen		}
100*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed32(b)
101*1c12ee1eSDan Willemsen		if n < 0 {
102*1c12ee1eSDan Willemsen			return val, 0, errDecode
103*1c12ee1eSDan Willemsen		}
104*1c12ee1eSDan Willemsen		return protoreflect.ValueOfInt32(int32(v)), n, nil
105*1c12ee1eSDan Willemsen	case protoreflect.Fixed32Kind:
106*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed32Type {
107*1c12ee1eSDan Willemsen			return val, 0, errUnknown
108*1c12ee1eSDan Willemsen		}
109*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed32(b)
110*1c12ee1eSDan Willemsen		if n < 0 {
111*1c12ee1eSDan Willemsen			return val, 0, errDecode
112*1c12ee1eSDan Willemsen		}
113*1c12ee1eSDan Willemsen		return protoreflect.ValueOfUint32(uint32(v)), n, nil
114*1c12ee1eSDan Willemsen	case protoreflect.FloatKind:
115*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed32Type {
116*1c12ee1eSDan Willemsen			return val, 0, errUnknown
117*1c12ee1eSDan Willemsen		}
118*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed32(b)
119*1c12ee1eSDan Willemsen		if n < 0 {
120*1c12ee1eSDan Willemsen			return val, 0, errDecode
121*1c12ee1eSDan Willemsen		}
122*1c12ee1eSDan Willemsen		return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), n, nil
123*1c12ee1eSDan Willemsen	case protoreflect.Sfixed64Kind:
124*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed64Type {
125*1c12ee1eSDan Willemsen			return val, 0, errUnknown
126*1c12ee1eSDan Willemsen		}
127*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed64(b)
128*1c12ee1eSDan Willemsen		if n < 0 {
129*1c12ee1eSDan Willemsen			return val, 0, errDecode
130*1c12ee1eSDan Willemsen		}
131*1c12ee1eSDan Willemsen		return protoreflect.ValueOfInt64(int64(v)), n, nil
132*1c12ee1eSDan Willemsen	case protoreflect.Fixed64Kind:
133*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed64Type {
134*1c12ee1eSDan Willemsen			return val, 0, errUnknown
135*1c12ee1eSDan Willemsen		}
136*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed64(b)
137*1c12ee1eSDan Willemsen		if n < 0 {
138*1c12ee1eSDan Willemsen			return val, 0, errDecode
139*1c12ee1eSDan Willemsen		}
140*1c12ee1eSDan Willemsen		return protoreflect.ValueOfUint64(v), n, nil
141*1c12ee1eSDan Willemsen	case protoreflect.DoubleKind:
142*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed64Type {
143*1c12ee1eSDan Willemsen			return val, 0, errUnknown
144*1c12ee1eSDan Willemsen		}
145*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed64(b)
146*1c12ee1eSDan Willemsen		if n < 0 {
147*1c12ee1eSDan Willemsen			return val, 0, errDecode
148*1c12ee1eSDan Willemsen		}
149*1c12ee1eSDan Willemsen		return protoreflect.ValueOfFloat64(math.Float64frombits(v)), n, nil
150*1c12ee1eSDan Willemsen	case protoreflect.StringKind:
151*1c12ee1eSDan Willemsen		if wtyp != protowire.BytesType {
152*1c12ee1eSDan Willemsen			return val, 0, errUnknown
153*1c12ee1eSDan Willemsen		}
154*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeBytes(b)
155*1c12ee1eSDan Willemsen		if n < 0 {
156*1c12ee1eSDan Willemsen			return val, 0, errDecode
157*1c12ee1eSDan Willemsen		}
158*1c12ee1eSDan Willemsen		if strs.EnforceUTF8(fd) && !utf8.Valid(v) {
159*1c12ee1eSDan Willemsen			return protoreflect.Value{}, 0, errors.InvalidUTF8(string(fd.FullName()))
160*1c12ee1eSDan Willemsen		}
161*1c12ee1eSDan Willemsen		return protoreflect.ValueOfString(string(v)), n, nil
162*1c12ee1eSDan Willemsen	case protoreflect.BytesKind:
163*1c12ee1eSDan Willemsen		if wtyp != protowire.BytesType {
164*1c12ee1eSDan Willemsen			return val, 0, errUnknown
165*1c12ee1eSDan Willemsen		}
166*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeBytes(b)
167*1c12ee1eSDan Willemsen		if n < 0 {
168*1c12ee1eSDan Willemsen			return val, 0, errDecode
169*1c12ee1eSDan Willemsen		}
170*1c12ee1eSDan Willemsen		return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), n, nil
171*1c12ee1eSDan Willemsen	case protoreflect.MessageKind:
172*1c12ee1eSDan Willemsen		if wtyp != protowire.BytesType {
173*1c12ee1eSDan Willemsen			return val, 0, errUnknown
174*1c12ee1eSDan Willemsen		}
175*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeBytes(b)
176*1c12ee1eSDan Willemsen		if n < 0 {
177*1c12ee1eSDan Willemsen			return val, 0, errDecode
178*1c12ee1eSDan Willemsen		}
179*1c12ee1eSDan Willemsen		return protoreflect.ValueOfBytes(v), n, nil
180*1c12ee1eSDan Willemsen	case protoreflect.GroupKind:
181*1c12ee1eSDan Willemsen		if wtyp != protowire.StartGroupType {
182*1c12ee1eSDan Willemsen			return val, 0, errUnknown
183*1c12ee1eSDan Willemsen		}
184*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeGroup(fd.Number(), b)
185*1c12ee1eSDan Willemsen		if n < 0 {
186*1c12ee1eSDan Willemsen			return val, 0, errDecode
187*1c12ee1eSDan Willemsen		}
188*1c12ee1eSDan Willemsen		return protoreflect.ValueOfBytes(v), n, nil
189*1c12ee1eSDan Willemsen	default:
190*1c12ee1eSDan Willemsen		return val, 0, errUnknown
191*1c12ee1eSDan Willemsen	}
192*1c12ee1eSDan Willemsen}
193*1c12ee1eSDan Willemsen
194*1c12ee1eSDan Willemsenfunc (o UnmarshalOptions) unmarshalList(b []byte, wtyp protowire.Type, list protoreflect.List, fd protoreflect.FieldDescriptor) (n int, err error) {
195*1c12ee1eSDan Willemsen	switch fd.Kind() {
196*1c12ee1eSDan Willemsen	case protoreflect.BoolKind:
197*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
198*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
199*1c12ee1eSDan Willemsen			if n < 0 {
200*1c12ee1eSDan Willemsen				return 0, errDecode
201*1c12ee1eSDan Willemsen			}
202*1c12ee1eSDan Willemsen			for len(buf) > 0 {
203*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeVarint(buf)
204*1c12ee1eSDan Willemsen				if n < 0 {
205*1c12ee1eSDan Willemsen					return 0, errDecode
206*1c12ee1eSDan Willemsen				}
207*1c12ee1eSDan Willemsen				buf = buf[n:]
208*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))
209*1c12ee1eSDan Willemsen			}
210*1c12ee1eSDan Willemsen			return n, nil
211*1c12ee1eSDan Willemsen		}
212*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
213*1c12ee1eSDan Willemsen			return 0, errUnknown
214*1c12ee1eSDan Willemsen		}
215*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
216*1c12ee1eSDan Willemsen		if n < 0 {
217*1c12ee1eSDan Willemsen			return 0, errDecode
218*1c12ee1eSDan Willemsen		}
219*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))
220*1c12ee1eSDan Willemsen		return n, nil
221*1c12ee1eSDan Willemsen	case protoreflect.EnumKind:
222*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
223*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
224*1c12ee1eSDan Willemsen			if n < 0 {
225*1c12ee1eSDan Willemsen				return 0, errDecode
226*1c12ee1eSDan Willemsen			}
227*1c12ee1eSDan Willemsen			for len(buf) > 0 {
228*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeVarint(buf)
229*1c12ee1eSDan Willemsen				if n < 0 {
230*1c12ee1eSDan Willemsen					return 0, errDecode
231*1c12ee1eSDan Willemsen				}
232*1c12ee1eSDan Willemsen				buf = buf[n:]
233*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
234*1c12ee1eSDan Willemsen			}
235*1c12ee1eSDan Willemsen			return n, nil
236*1c12ee1eSDan Willemsen		}
237*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
238*1c12ee1eSDan Willemsen			return 0, errUnknown
239*1c12ee1eSDan Willemsen		}
240*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
241*1c12ee1eSDan Willemsen		if n < 0 {
242*1c12ee1eSDan Willemsen			return 0, errDecode
243*1c12ee1eSDan Willemsen		}
244*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
245*1c12ee1eSDan Willemsen		return n, nil
246*1c12ee1eSDan Willemsen	case protoreflect.Int32Kind:
247*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
248*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
249*1c12ee1eSDan Willemsen			if n < 0 {
250*1c12ee1eSDan Willemsen				return 0, errDecode
251*1c12ee1eSDan Willemsen			}
252*1c12ee1eSDan Willemsen			for len(buf) > 0 {
253*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeVarint(buf)
254*1c12ee1eSDan Willemsen				if n < 0 {
255*1c12ee1eSDan Willemsen					return 0, errDecode
256*1c12ee1eSDan Willemsen				}
257*1c12ee1eSDan Willemsen				buf = buf[n:]
258*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfInt32(int32(v)))
259*1c12ee1eSDan Willemsen			}
260*1c12ee1eSDan Willemsen			return n, nil
261*1c12ee1eSDan Willemsen		}
262*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
263*1c12ee1eSDan Willemsen			return 0, errUnknown
264*1c12ee1eSDan Willemsen		}
265*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
266*1c12ee1eSDan Willemsen		if n < 0 {
267*1c12ee1eSDan Willemsen			return 0, errDecode
268*1c12ee1eSDan Willemsen		}
269*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfInt32(int32(v)))
270*1c12ee1eSDan Willemsen		return n, nil
271*1c12ee1eSDan Willemsen	case protoreflect.Sint32Kind:
272*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
273*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
274*1c12ee1eSDan Willemsen			if n < 0 {
275*1c12ee1eSDan Willemsen				return 0, errDecode
276*1c12ee1eSDan Willemsen			}
277*1c12ee1eSDan Willemsen			for len(buf) > 0 {
278*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeVarint(buf)
279*1c12ee1eSDan Willemsen				if n < 0 {
280*1c12ee1eSDan Willemsen					return 0, errDecode
281*1c12ee1eSDan Willemsen				}
282*1c12ee1eSDan Willemsen				buf = buf[n:]
283*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))
284*1c12ee1eSDan Willemsen			}
285*1c12ee1eSDan Willemsen			return n, nil
286*1c12ee1eSDan Willemsen		}
287*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
288*1c12ee1eSDan Willemsen			return 0, errUnknown
289*1c12ee1eSDan Willemsen		}
290*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
291*1c12ee1eSDan Willemsen		if n < 0 {
292*1c12ee1eSDan Willemsen			return 0, errDecode
293*1c12ee1eSDan Willemsen		}
294*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))
295*1c12ee1eSDan Willemsen		return n, nil
296*1c12ee1eSDan Willemsen	case protoreflect.Uint32Kind:
297*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
298*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
299*1c12ee1eSDan Willemsen			if n < 0 {
300*1c12ee1eSDan Willemsen				return 0, errDecode
301*1c12ee1eSDan Willemsen			}
302*1c12ee1eSDan Willemsen			for len(buf) > 0 {
303*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeVarint(buf)
304*1c12ee1eSDan Willemsen				if n < 0 {
305*1c12ee1eSDan Willemsen					return 0, errDecode
306*1c12ee1eSDan Willemsen				}
307*1c12ee1eSDan Willemsen				buf = buf[n:]
308*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfUint32(uint32(v)))
309*1c12ee1eSDan Willemsen			}
310*1c12ee1eSDan Willemsen			return n, nil
311*1c12ee1eSDan Willemsen		}
312*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
313*1c12ee1eSDan Willemsen			return 0, errUnknown
314*1c12ee1eSDan Willemsen		}
315*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
316*1c12ee1eSDan Willemsen		if n < 0 {
317*1c12ee1eSDan Willemsen			return 0, errDecode
318*1c12ee1eSDan Willemsen		}
319*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfUint32(uint32(v)))
320*1c12ee1eSDan Willemsen		return n, nil
321*1c12ee1eSDan Willemsen	case protoreflect.Int64Kind:
322*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
323*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
324*1c12ee1eSDan Willemsen			if n < 0 {
325*1c12ee1eSDan Willemsen				return 0, errDecode
326*1c12ee1eSDan Willemsen			}
327*1c12ee1eSDan Willemsen			for len(buf) > 0 {
328*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeVarint(buf)
329*1c12ee1eSDan Willemsen				if n < 0 {
330*1c12ee1eSDan Willemsen					return 0, errDecode
331*1c12ee1eSDan Willemsen				}
332*1c12ee1eSDan Willemsen				buf = buf[n:]
333*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfInt64(int64(v)))
334*1c12ee1eSDan Willemsen			}
335*1c12ee1eSDan Willemsen			return n, nil
336*1c12ee1eSDan Willemsen		}
337*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
338*1c12ee1eSDan Willemsen			return 0, errUnknown
339*1c12ee1eSDan Willemsen		}
340*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
341*1c12ee1eSDan Willemsen		if n < 0 {
342*1c12ee1eSDan Willemsen			return 0, errDecode
343*1c12ee1eSDan Willemsen		}
344*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfInt64(int64(v)))
345*1c12ee1eSDan Willemsen		return n, nil
346*1c12ee1eSDan Willemsen	case protoreflect.Sint64Kind:
347*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
348*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
349*1c12ee1eSDan Willemsen			if n < 0 {
350*1c12ee1eSDan Willemsen				return 0, errDecode
351*1c12ee1eSDan Willemsen			}
352*1c12ee1eSDan Willemsen			for len(buf) > 0 {
353*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeVarint(buf)
354*1c12ee1eSDan Willemsen				if n < 0 {
355*1c12ee1eSDan Willemsen					return 0, errDecode
356*1c12ee1eSDan Willemsen				}
357*1c12ee1eSDan Willemsen				buf = buf[n:]
358*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))
359*1c12ee1eSDan Willemsen			}
360*1c12ee1eSDan Willemsen			return n, nil
361*1c12ee1eSDan Willemsen		}
362*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
363*1c12ee1eSDan Willemsen			return 0, errUnknown
364*1c12ee1eSDan Willemsen		}
365*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
366*1c12ee1eSDan Willemsen		if n < 0 {
367*1c12ee1eSDan Willemsen			return 0, errDecode
368*1c12ee1eSDan Willemsen		}
369*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))
370*1c12ee1eSDan Willemsen		return n, nil
371*1c12ee1eSDan Willemsen	case protoreflect.Uint64Kind:
372*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
373*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
374*1c12ee1eSDan Willemsen			if n < 0 {
375*1c12ee1eSDan Willemsen				return 0, errDecode
376*1c12ee1eSDan Willemsen			}
377*1c12ee1eSDan Willemsen			for len(buf) > 0 {
378*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeVarint(buf)
379*1c12ee1eSDan Willemsen				if n < 0 {
380*1c12ee1eSDan Willemsen					return 0, errDecode
381*1c12ee1eSDan Willemsen				}
382*1c12ee1eSDan Willemsen				buf = buf[n:]
383*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfUint64(v))
384*1c12ee1eSDan Willemsen			}
385*1c12ee1eSDan Willemsen			return n, nil
386*1c12ee1eSDan Willemsen		}
387*1c12ee1eSDan Willemsen		if wtyp != protowire.VarintType {
388*1c12ee1eSDan Willemsen			return 0, errUnknown
389*1c12ee1eSDan Willemsen		}
390*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeVarint(b)
391*1c12ee1eSDan Willemsen		if n < 0 {
392*1c12ee1eSDan Willemsen			return 0, errDecode
393*1c12ee1eSDan Willemsen		}
394*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfUint64(v))
395*1c12ee1eSDan Willemsen		return n, nil
396*1c12ee1eSDan Willemsen	case protoreflect.Sfixed32Kind:
397*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
398*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
399*1c12ee1eSDan Willemsen			if n < 0 {
400*1c12ee1eSDan Willemsen				return 0, errDecode
401*1c12ee1eSDan Willemsen			}
402*1c12ee1eSDan Willemsen			for len(buf) > 0 {
403*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeFixed32(buf)
404*1c12ee1eSDan Willemsen				if n < 0 {
405*1c12ee1eSDan Willemsen					return 0, errDecode
406*1c12ee1eSDan Willemsen				}
407*1c12ee1eSDan Willemsen				buf = buf[n:]
408*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfInt32(int32(v)))
409*1c12ee1eSDan Willemsen			}
410*1c12ee1eSDan Willemsen			return n, nil
411*1c12ee1eSDan Willemsen		}
412*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed32Type {
413*1c12ee1eSDan Willemsen			return 0, errUnknown
414*1c12ee1eSDan Willemsen		}
415*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed32(b)
416*1c12ee1eSDan Willemsen		if n < 0 {
417*1c12ee1eSDan Willemsen			return 0, errDecode
418*1c12ee1eSDan Willemsen		}
419*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfInt32(int32(v)))
420*1c12ee1eSDan Willemsen		return n, nil
421*1c12ee1eSDan Willemsen	case protoreflect.Fixed32Kind:
422*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
423*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
424*1c12ee1eSDan Willemsen			if n < 0 {
425*1c12ee1eSDan Willemsen				return 0, errDecode
426*1c12ee1eSDan Willemsen			}
427*1c12ee1eSDan Willemsen			for len(buf) > 0 {
428*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeFixed32(buf)
429*1c12ee1eSDan Willemsen				if n < 0 {
430*1c12ee1eSDan Willemsen					return 0, errDecode
431*1c12ee1eSDan Willemsen				}
432*1c12ee1eSDan Willemsen				buf = buf[n:]
433*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfUint32(uint32(v)))
434*1c12ee1eSDan Willemsen			}
435*1c12ee1eSDan Willemsen			return n, nil
436*1c12ee1eSDan Willemsen		}
437*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed32Type {
438*1c12ee1eSDan Willemsen			return 0, errUnknown
439*1c12ee1eSDan Willemsen		}
440*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed32(b)
441*1c12ee1eSDan Willemsen		if n < 0 {
442*1c12ee1eSDan Willemsen			return 0, errDecode
443*1c12ee1eSDan Willemsen		}
444*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfUint32(uint32(v)))
445*1c12ee1eSDan Willemsen		return n, nil
446*1c12ee1eSDan Willemsen	case protoreflect.FloatKind:
447*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
448*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
449*1c12ee1eSDan Willemsen			if n < 0 {
450*1c12ee1eSDan Willemsen				return 0, errDecode
451*1c12ee1eSDan Willemsen			}
452*1c12ee1eSDan Willemsen			for len(buf) > 0 {
453*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeFixed32(buf)
454*1c12ee1eSDan Willemsen				if n < 0 {
455*1c12ee1eSDan Willemsen					return 0, errDecode
456*1c12ee1eSDan Willemsen				}
457*1c12ee1eSDan Willemsen				buf = buf[n:]
458*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
459*1c12ee1eSDan Willemsen			}
460*1c12ee1eSDan Willemsen			return n, nil
461*1c12ee1eSDan Willemsen		}
462*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed32Type {
463*1c12ee1eSDan Willemsen			return 0, errUnknown
464*1c12ee1eSDan Willemsen		}
465*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed32(b)
466*1c12ee1eSDan Willemsen		if n < 0 {
467*1c12ee1eSDan Willemsen			return 0, errDecode
468*1c12ee1eSDan Willemsen		}
469*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
470*1c12ee1eSDan Willemsen		return n, nil
471*1c12ee1eSDan Willemsen	case protoreflect.Sfixed64Kind:
472*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
473*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
474*1c12ee1eSDan Willemsen			if n < 0 {
475*1c12ee1eSDan Willemsen				return 0, errDecode
476*1c12ee1eSDan Willemsen			}
477*1c12ee1eSDan Willemsen			for len(buf) > 0 {
478*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeFixed64(buf)
479*1c12ee1eSDan Willemsen				if n < 0 {
480*1c12ee1eSDan Willemsen					return 0, errDecode
481*1c12ee1eSDan Willemsen				}
482*1c12ee1eSDan Willemsen				buf = buf[n:]
483*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfInt64(int64(v)))
484*1c12ee1eSDan Willemsen			}
485*1c12ee1eSDan Willemsen			return n, nil
486*1c12ee1eSDan Willemsen		}
487*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed64Type {
488*1c12ee1eSDan Willemsen			return 0, errUnknown
489*1c12ee1eSDan Willemsen		}
490*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed64(b)
491*1c12ee1eSDan Willemsen		if n < 0 {
492*1c12ee1eSDan Willemsen			return 0, errDecode
493*1c12ee1eSDan Willemsen		}
494*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfInt64(int64(v)))
495*1c12ee1eSDan Willemsen		return n, nil
496*1c12ee1eSDan Willemsen	case protoreflect.Fixed64Kind:
497*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
498*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
499*1c12ee1eSDan Willemsen			if n < 0 {
500*1c12ee1eSDan Willemsen				return 0, errDecode
501*1c12ee1eSDan Willemsen			}
502*1c12ee1eSDan Willemsen			for len(buf) > 0 {
503*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeFixed64(buf)
504*1c12ee1eSDan Willemsen				if n < 0 {
505*1c12ee1eSDan Willemsen					return 0, errDecode
506*1c12ee1eSDan Willemsen				}
507*1c12ee1eSDan Willemsen				buf = buf[n:]
508*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfUint64(v))
509*1c12ee1eSDan Willemsen			}
510*1c12ee1eSDan Willemsen			return n, nil
511*1c12ee1eSDan Willemsen		}
512*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed64Type {
513*1c12ee1eSDan Willemsen			return 0, errUnknown
514*1c12ee1eSDan Willemsen		}
515*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed64(b)
516*1c12ee1eSDan Willemsen		if n < 0 {
517*1c12ee1eSDan Willemsen			return 0, errDecode
518*1c12ee1eSDan Willemsen		}
519*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfUint64(v))
520*1c12ee1eSDan Willemsen		return n, nil
521*1c12ee1eSDan Willemsen	case protoreflect.DoubleKind:
522*1c12ee1eSDan Willemsen		if wtyp == protowire.BytesType {
523*1c12ee1eSDan Willemsen			buf, n := protowire.ConsumeBytes(b)
524*1c12ee1eSDan Willemsen			if n < 0 {
525*1c12ee1eSDan Willemsen				return 0, errDecode
526*1c12ee1eSDan Willemsen			}
527*1c12ee1eSDan Willemsen			for len(buf) > 0 {
528*1c12ee1eSDan Willemsen				v, n := protowire.ConsumeFixed64(buf)
529*1c12ee1eSDan Willemsen				if n < 0 {
530*1c12ee1eSDan Willemsen					return 0, errDecode
531*1c12ee1eSDan Willemsen				}
532*1c12ee1eSDan Willemsen				buf = buf[n:]
533*1c12ee1eSDan Willemsen				list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
534*1c12ee1eSDan Willemsen			}
535*1c12ee1eSDan Willemsen			return n, nil
536*1c12ee1eSDan Willemsen		}
537*1c12ee1eSDan Willemsen		if wtyp != protowire.Fixed64Type {
538*1c12ee1eSDan Willemsen			return 0, errUnknown
539*1c12ee1eSDan Willemsen		}
540*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeFixed64(b)
541*1c12ee1eSDan Willemsen		if n < 0 {
542*1c12ee1eSDan Willemsen			return 0, errDecode
543*1c12ee1eSDan Willemsen		}
544*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
545*1c12ee1eSDan Willemsen		return n, nil
546*1c12ee1eSDan Willemsen	case protoreflect.StringKind:
547*1c12ee1eSDan Willemsen		if wtyp != protowire.BytesType {
548*1c12ee1eSDan Willemsen			return 0, errUnknown
549*1c12ee1eSDan Willemsen		}
550*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeBytes(b)
551*1c12ee1eSDan Willemsen		if n < 0 {
552*1c12ee1eSDan Willemsen			return 0, errDecode
553*1c12ee1eSDan Willemsen		}
554*1c12ee1eSDan Willemsen		if strs.EnforceUTF8(fd) && !utf8.Valid(v) {
555*1c12ee1eSDan Willemsen			return 0, errors.InvalidUTF8(string(fd.FullName()))
556*1c12ee1eSDan Willemsen		}
557*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfString(string(v)))
558*1c12ee1eSDan Willemsen		return n, nil
559*1c12ee1eSDan Willemsen	case protoreflect.BytesKind:
560*1c12ee1eSDan Willemsen		if wtyp != protowire.BytesType {
561*1c12ee1eSDan Willemsen			return 0, errUnknown
562*1c12ee1eSDan Willemsen		}
563*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeBytes(b)
564*1c12ee1eSDan Willemsen		if n < 0 {
565*1c12ee1eSDan Willemsen			return 0, errDecode
566*1c12ee1eSDan Willemsen		}
567*1c12ee1eSDan Willemsen		list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...)))
568*1c12ee1eSDan Willemsen		return n, nil
569*1c12ee1eSDan Willemsen	case protoreflect.MessageKind:
570*1c12ee1eSDan Willemsen		if wtyp != protowire.BytesType {
571*1c12ee1eSDan Willemsen			return 0, errUnknown
572*1c12ee1eSDan Willemsen		}
573*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeBytes(b)
574*1c12ee1eSDan Willemsen		if n < 0 {
575*1c12ee1eSDan Willemsen			return 0, errDecode
576*1c12ee1eSDan Willemsen		}
577*1c12ee1eSDan Willemsen		m := list.NewElement()
578*1c12ee1eSDan Willemsen		if err := o.unmarshalMessage(v, m.Message()); err != nil {
579*1c12ee1eSDan Willemsen			return 0, err
580*1c12ee1eSDan Willemsen		}
581*1c12ee1eSDan Willemsen		list.Append(m)
582*1c12ee1eSDan Willemsen		return n, nil
583*1c12ee1eSDan Willemsen	case protoreflect.GroupKind:
584*1c12ee1eSDan Willemsen		if wtyp != protowire.StartGroupType {
585*1c12ee1eSDan Willemsen			return 0, errUnknown
586*1c12ee1eSDan Willemsen		}
587*1c12ee1eSDan Willemsen		v, n := protowire.ConsumeGroup(fd.Number(), b)
588*1c12ee1eSDan Willemsen		if n < 0 {
589*1c12ee1eSDan Willemsen			return 0, errDecode
590*1c12ee1eSDan Willemsen		}
591*1c12ee1eSDan Willemsen		m := list.NewElement()
592*1c12ee1eSDan Willemsen		if err := o.unmarshalMessage(v, m.Message()); err != nil {
593*1c12ee1eSDan Willemsen			return 0, err
594*1c12ee1eSDan Willemsen		}
595*1c12ee1eSDan Willemsen		list.Append(m)
596*1c12ee1eSDan Willemsen		return n, nil
597*1c12ee1eSDan Willemsen	default:
598*1c12ee1eSDan Willemsen		return 0, errUnknown
599*1c12ee1eSDan Willemsen	}
600*1c12ee1eSDan Willemsen}
601*1c12ee1eSDan Willemsen
602*1c12ee1eSDan Willemsen// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices.
603*1c12ee1eSDan Willemsenvar emptyBuf [0]byte
604