blob: c40c01d5c769d137258d977ef2937801dafaacc8 [file] [log] [blame]
Damien Neilba23aa52018-12-07 14:38:17 -08001// 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 proto
8
9import (
10 "math"
Damien Neilbc310b52019-04-11 11:46:55 -070011 "unicode/utf8"
Damien Neilba23aa52018-12-07 14:38:17 -080012
Damien Neile89e6242019-05-13 23:55:40 -070013 "google.golang.org/protobuf/internal/encoding/wire"
14 "google.golang.org/protobuf/internal/errors"
Joe Tsaic51e2e02019-07-13 00:44:41 -070015 "google.golang.org/protobuf/internal/strs"
Damien Neile89e6242019-05-13 23:55:40 -070016 "google.golang.org/protobuf/reflect/protoreflect"
Damien Neilba23aa52018-12-07 14:38:17 -080017)
18
19// unmarshalScalar decodes a value of the given kind.
20//
21// Message values are decoded into a []byte which aliases the input data.
Joe Tsai378c1322019-04-25 23:48:08 -070022func (o UnmarshalOptions) unmarshalScalar(b []byte, wtyp wire.Type, fd protoreflect.FieldDescriptor) (val protoreflect.Value, n int, err error) {
23 switch fd.Kind() {
Damien Neilba23aa52018-12-07 14:38:17 -080024 case protoreflect.BoolKind:
25 if wtyp != wire.VarintType {
26 return val, 0, errUnknown
27 }
28 v, n := wire.ConsumeVarint(b)
29 if n < 0 {
30 return val, 0, wire.ParseError(n)
31 }
Damien Neilc5060d22019-08-22 17:01:56 -070032 return protoreflect.ValueOfBool(wire.DecodeBool(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -080033 case protoreflect.EnumKind:
34 if wtyp != wire.VarintType {
35 return val, 0, errUnknown
36 }
37 v, n := wire.ConsumeVarint(b)
38 if n < 0 {
39 return val, 0, wire.ParseError(n)
40 }
Damien Neilc5060d22019-08-22 17:01:56 -070041 return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -080042 case protoreflect.Int32Kind:
43 if wtyp != wire.VarintType {
44 return val, 0, errUnknown
45 }
46 v, n := wire.ConsumeVarint(b)
47 if n < 0 {
48 return val, 0, wire.ParseError(n)
49 }
Damien Neilc5060d22019-08-22 17:01:56 -070050 return protoreflect.ValueOfInt32(int32(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -080051 case protoreflect.Sint32Kind:
52 if wtyp != wire.VarintType {
53 return val, 0, errUnknown
54 }
55 v, n := wire.ConsumeVarint(b)
56 if n < 0 {
57 return val, 0, wire.ParseError(n)
58 }
Damien Neilc5060d22019-08-22 17:01:56 -070059 return protoreflect.ValueOfInt32(int32(wire.DecodeZigZag(v & math.MaxUint32))), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -080060 case protoreflect.Uint32Kind:
61 if wtyp != wire.VarintType {
62 return val, 0, errUnknown
63 }
64 v, n := wire.ConsumeVarint(b)
65 if n < 0 {
66 return val, 0, wire.ParseError(n)
67 }
Damien Neilc5060d22019-08-22 17:01:56 -070068 return protoreflect.ValueOfUint32(uint32(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -080069 case protoreflect.Int64Kind:
70 if wtyp != wire.VarintType {
71 return val, 0, errUnknown
72 }
73 v, n := wire.ConsumeVarint(b)
74 if n < 0 {
75 return val, 0, wire.ParseError(n)
76 }
Damien Neilc5060d22019-08-22 17:01:56 -070077 return protoreflect.ValueOfInt64(int64(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -080078 case protoreflect.Sint64Kind:
79 if wtyp != wire.VarintType {
80 return val, 0, errUnknown
81 }
82 v, n := wire.ConsumeVarint(b)
83 if n < 0 {
84 return val, 0, wire.ParseError(n)
85 }
Damien Neilc5060d22019-08-22 17:01:56 -070086 return protoreflect.ValueOfInt64(wire.DecodeZigZag(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -080087 case protoreflect.Uint64Kind:
88 if wtyp != wire.VarintType {
89 return val, 0, errUnknown
90 }
91 v, n := wire.ConsumeVarint(b)
92 if n < 0 {
93 return val, 0, wire.ParseError(n)
94 }
Damien Neilc5060d22019-08-22 17:01:56 -070095 return protoreflect.ValueOfUint64(v), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -080096 case protoreflect.Sfixed32Kind:
97 if wtyp != wire.Fixed32Type {
98 return val, 0, errUnknown
99 }
100 v, n := wire.ConsumeFixed32(b)
101 if n < 0 {
102 return val, 0, wire.ParseError(n)
103 }
Damien Neilc5060d22019-08-22 17:01:56 -0700104 return protoreflect.ValueOfInt32(int32(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800105 case protoreflect.Fixed32Kind:
106 if wtyp != wire.Fixed32Type {
107 return val, 0, errUnknown
108 }
109 v, n := wire.ConsumeFixed32(b)
110 if n < 0 {
111 return val, 0, wire.ParseError(n)
112 }
Damien Neilc5060d22019-08-22 17:01:56 -0700113 return protoreflect.ValueOfUint32(uint32(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800114 case protoreflect.FloatKind:
115 if wtyp != wire.Fixed32Type {
116 return val, 0, errUnknown
117 }
118 v, n := wire.ConsumeFixed32(b)
119 if n < 0 {
120 return val, 0, wire.ParseError(n)
121 }
Damien Neilc5060d22019-08-22 17:01:56 -0700122 return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800123 case protoreflect.Sfixed64Kind:
124 if wtyp != wire.Fixed64Type {
125 return val, 0, errUnknown
126 }
127 v, n := wire.ConsumeFixed64(b)
128 if n < 0 {
129 return val, 0, wire.ParseError(n)
130 }
Damien Neilc5060d22019-08-22 17:01:56 -0700131 return protoreflect.ValueOfInt64(int64(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800132 case protoreflect.Fixed64Kind:
133 if wtyp != wire.Fixed64Type {
134 return val, 0, errUnknown
135 }
136 v, n := wire.ConsumeFixed64(b)
137 if n < 0 {
138 return val, 0, wire.ParseError(n)
139 }
Damien Neilc5060d22019-08-22 17:01:56 -0700140 return protoreflect.ValueOfUint64(v), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800141 case protoreflect.DoubleKind:
142 if wtyp != wire.Fixed64Type {
143 return val, 0, errUnknown
144 }
145 v, n := wire.ConsumeFixed64(b)
146 if n < 0 {
147 return val, 0, wire.ParseError(n)
148 }
Damien Neilc5060d22019-08-22 17:01:56 -0700149 return protoreflect.ValueOfFloat64(math.Float64frombits(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800150 case protoreflect.StringKind:
151 if wtyp != wire.BytesType {
152 return val, 0, errUnknown
153 }
154 v, n := wire.ConsumeBytes(b)
155 if n < 0 {
156 return val, 0, wire.ParseError(n)
157 }
Joe Tsaic51e2e02019-07-13 00:44:41 -0700158 if strs.EnforceUTF8(fd) && !utf8.Valid(v) {
Damien Neil8c86fc52019-06-19 09:28:29 -0700159 return protoreflect.Value{}, 0, errors.InvalidUTF8(string(fd.FullName()))
Damien Neilbc310b52019-04-11 11:46:55 -0700160 }
Damien Neilc5060d22019-08-22 17:01:56 -0700161 return protoreflect.ValueOfString(string(v)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800162 case protoreflect.BytesKind:
163 if wtyp != wire.BytesType {
164 return val, 0, errUnknown
165 }
166 v, n := wire.ConsumeBytes(b)
167 if n < 0 {
168 return val, 0, wire.ParseError(n)
169 }
Damien Neil5366f822019-12-05 14:54:35 -0800170 return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800171 case protoreflect.MessageKind:
172 if wtyp != wire.BytesType {
173 return val, 0, errUnknown
174 }
175 v, n := wire.ConsumeBytes(b)
176 if n < 0 {
177 return val, 0, wire.ParseError(n)
178 }
Damien Neilc5060d22019-08-22 17:01:56 -0700179 return protoreflect.ValueOfBytes(v), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800180 case protoreflect.GroupKind:
181 if wtyp != wire.StartGroupType {
182 return val, 0, errUnknown
183 }
Joe Tsai378c1322019-04-25 23:48:08 -0700184 v, n := wire.ConsumeGroup(fd.Number(), b)
Damien Neilba23aa52018-12-07 14:38:17 -0800185 if n < 0 {
186 return val, 0, wire.ParseError(n)
187 }
Damien Neilc5060d22019-08-22 17:01:56 -0700188 return protoreflect.ValueOfBytes(v), n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800189 default:
190 return val, 0, errUnknown
191 }
192}
193
Joe Tsai378c1322019-04-25 23:48:08 -0700194func (o UnmarshalOptions) unmarshalList(b []byte, wtyp wire.Type, list protoreflect.List, fd protoreflect.FieldDescriptor) (n int, err error) {
Joe Tsai378c1322019-04-25 23:48:08 -0700195 switch fd.Kind() {
Damien Neilba23aa52018-12-07 14:38:17 -0800196 case protoreflect.BoolKind:
197 if wtyp == wire.BytesType {
198 buf, n := wire.ConsumeBytes(b)
199 if n < 0 {
200 return 0, wire.ParseError(n)
201 }
202 for len(buf) > 0 {
203 v, n := wire.ConsumeVarint(buf)
204 if n < 0 {
205 return 0, wire.ParseError(n)
206 }
207 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700208 list.Append(protoreflect.ValueOfBool(wire.DecodeBool(v)))
Damien Neilba23aa52018-12-07 14:38:17 -0800209 }
210 return n, nil
211 }
212 if wtyp != wire.VarintType {
213 return 0, errUnknown
214 }
215 v, n := wire.ConsumeVarint(b)
216 if n < 0 {
217 return 0, wire.ParseError(n)
218 }
Damien Neilc5060d22019-08-22 17:01:56 -0700219 list.Append(protoreflect.ValueOfBool(wire.DecodeBool(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700220 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800221 case protoreflect.EnumKind:
222 if wtyp == wire.BytesType {
223 buf, n := wire.ConsumeBytes(b)
224 if n < 0 {
225 return 0, wire.ParseError(n)
226 }
227 for len(buf) > 0 {
228 v, n := wire.ConsumeVarint(buf)
229 if n < 0 {
230 return 0, wire.ParseError(n)
231 }
232 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700233 list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
Damien Neilba23aa52018-12-07 14:38:17 -0800234 }
235 return n, nil
236 }
237 if wtyp != wire.VarintType {
238 return 0, errUnknown
239 }
240 v, n := wire.ConsumeVarint(b)
241 if n < 0 {
242 return 0, wire.ParseError(n)
243 }
Damien Neilc5060d22019-08-22 17:01:56 -0700244 list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700245 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800246 case protoreflect.Int32Kind:
247 if wtyp == wire.BytesType {
248 buf, n := wire.ConsumeBytes(b)
249 if n < 0 {
250 return 0, wire.ParseError(n)
251 }
252 for len(buf) > 0 {
253 v, n := wire.ConsumeVarint(buf)
254 if n < 0 {
255 return 0, wire.ParseError(n)
256 }
257 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700258 list.Append(protoreflect.ValueOfInt32(int32(v)))
Damien Neilba23aa52018-12-07 14:38:17 -0800259 }
260 return n, nil
261 }
262 if wtyp != wire.VarintType {
263 return 0, errUnknown
264 }
265 v, n := wire.ConsumeVarint(b)
266 if n < 0 {
267 return 0, wire.ParseError(n)
268 }
Damien Neilc5060d22019-08-22 17:01:56 -0700269 list.Append(protoreflect.ValueOfInt32(int32(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700270 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800271 case protoreflect.Sint32Kind:
272 if wtyp == wire.BytesType {
273 buf, n := wire.ConsumeBytes(b)
274 if n < 0 {
275 return 0, wire.ParseError(n)
276 }
277 for len(buf) > 0 {
278 v, n := wire.ConsumeVarint(buf)
279 if n < 0 {
280 return 0, wire.ParseError(n)
281 }
282 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700283 list.Append(protoreflect.ValueOfInt32(int32(wire.DecodeZigZag(v & math.MaxUint32))))
Damien Neilba23aa52018-12-07 14:38:17 -0800284 }
285 return n, nil
286 }
287 if wtyp != wire.VarintType {
288 return 0, errUnknown
289 }
290 v, n := wire.ConsumeVarint(b)
291 if n < 0 {
292 return 0, wire.ParseError(n)
293 }
Damien Neilc5060d22019-08-22 17:01:56 -0700294 list.Append(protoreflect.ValueOfInt32(int32(wire.DecodeZigZag(v & math.MaxUint32))))
Damien Neil8c86fc52019-06-19 09:28:29 -0700295 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800296 case protoreflect.Uint32Kind:
297 if wtyp == wire.BytesType {
298 buf, n := wire.ConsumeBytes(b)
299 if n < 0 {
300 return 0, wire.ParseError(n)
301 }
302 for len(buf) > 0 {
303 v, n := wire.ConsumeVarint(buf)
304 if n < 0 {
305 return 0, wire.ParseError(n)
306 }
307 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700308 list.Append(protoreflect.ValueOfUint32(uint32(v)))
Damien Neilba23aa52018-12-07 14:38:17 -0800309 }
310 return n, nil
311 }
312 if wtyp != wire.VarintType {
313 return 0, errUnknown
314 }
315 v, n := wire.ConsumeVarint(b)
316 if n < 0 {
317 return 0, wire.ParseError(n)
318 }
Damien Neilc5060d22019-08-22 17:01:56 -0700319 list.Append(protoreflect.ValueOfUint32(uint32(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700320 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800321 case protoreflect.Int64Kind:
322 if wtyp == wire.BytesType {
323 buf, n := wire.ConsumeBytes(b)
324 if n < 0 {
325 return 0, wire.ParseError(n)
326 }
327 for len(buf) > 0 {
328 v, n := wire.ConsumeVarint(buf)
329 if n < 0 {
330 return 0, wire.ParseError(n)
331 }
332 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700333 list.Append(protoreflect.ValueOfInt64(int64(v)))
Damien Neilba23aa52018-12-07 14:38:17 -0800334 }
335 return n, nil
336 }
337 if wtyp != wire.VarintType {
338 return 0, errUnknown
339 }
340 v, n := wire.ConsumeVarint(b)
341 if n < 0 {
342 return 0, wire.ParseError(n)
343 }
Damien Neilc5060d22019-08-22 17:01:56 -0700344 list.Append(protoreflect.ValueOfInt64(int64(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700345 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800346 case protoreflect.Sint64Kind:
347 if wtyp == wire.BytesType {
348 buf, n := wire.ConsumeBytes(b)
349 if n < 0 {
350 return 0, wire.ParseError(n)
351 }
352 for len(buf) > 0 {
353 v, n := wire.ConsumeVarint(buf)
354 if n < 0 {
355 return 0, wire.ParseError(n)
356 }
357 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700358 list.Append(protoreflect.ValueOfInt64(wire.DecodeZigZag(v)))
Damien Neilba23aa52018-12-07 14:38:17 -0800359 }
360 return n, nil
361 }
362 if wtyp != wire.VarintType {
363 return 0, errUnknown
364 }
365 v, n := wire.ConsumeVarint(b)
366 if n < 0 {
367 return 0, wire.ParseError(n)
368 }
Damien Neilc5060d22019-08-22 17:01:56 -0700369 list.Append(protoreflect.ValueOfInt64(wire.DecodeZigZag(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700370 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800371 case protoreflect.Uint64Kind:
372 if wtyp == wire.BytesType {
373 buf, n := wire.ConsumeBytes(b)
374 if n < 0 {
375 return 0, wire.ParseError(n)
376 }
377 for len(buf) > 0 {
378 v, n := wire.ConsumeVarint(buf)
379 if n < 0 {
380 return 0, wire.ParseError(n)
381 }
382 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700383 list.Append(protoreflect.ValueOfUint64(v))
Damien Neilba23aa52018-12-07 14:38:17 -0800384 }
385 return n, nil
386 }
387 if wtyp != wire.VarintType {
388 return 0, errUnknown
389 }
390 v, n := wire.ConsumeVarint(b)
391 if n < 0 {
392 return 0, wire.ParseError(n)
393 }
Damien Neilc5060d22019-08-22 17:01:56 -0700394 list.Append(protoreflect.ValueOfUint64(v))
Damien Neil8c86fc52019-06-19 09:28:29 -0700395 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800396 case protoreflect.Sfixed32Kind:
397 if wtyp == wire.BytesType {
398 buf, n := wire.ConsumeBytes(b)
399 if n < 0 {
400 return 0, wire.ParseError(n)
401 }
402 for len(buf) > 0 {
403 v, n := wire.ConsumeFixed32(buf)
404 if n < 0 {
405 return 0, wire.ParseError(n)
406 }
407 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700408 list.Append(protoreflect.ValueOfInt32(int32(v)))
Damien Neilba23aa52018-12-07 14:38:17 -0800409 }
410 return n, nil
411 }
412 if wtyp != wire.Fixed32Type {
413 return 0, errUnknown
414 }
415 v, n := wire.ConsumeFixed32(b)
416 if n < 0 {
417 return 0, wire.ParseError(n)
418 }
Damien Neilc5060d22019-08-22 17:01:56 -0700419 list.Append(protoreflect.ValueOfInt32(int32(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700420 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800421 case protoreflect.Fixed32Kind:
422 if wtyp == wire.BytesType {
423 buf, n := wire.ConsumeBytes(b)
424 if n < 0 {
425 return 0, wire.ParseError(n)
426 }
427 for len(buf) > 0 {
428 v, n := wire.ConsumeFixed32(buf)
429 if n < 0 {
430 return 0, wire.ParseError(n)
431 }
432 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700433 list.Append(protoreflect.ValueOfUint32(uint32(v)))
Damien Neilba23aa52018-12-07 14:38:17 -0800434 }
435 return n, nil
436 }
437 if wtyp != wire.Fixed32Type {
438 return 0, errUnknown
439 }
440 v, n := wire.ConsumeFixed32(b)
441 if n < 0 {
442 return 0, wire.ParseError(n)
443 }
Damien Neilc5060d22019-08-22 17:01:56 -0700444 list.Append(protoreflect.ValueOfUint32(uint32(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700445 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800446 case protoreflect.FloatKind:
447 if wtyp == wire.BytesType {
448 buf, n := wire.ConsumeBytes(b)
449 if n < 0 {
450 return 0, wire.ParseError(n)
451 }
452 for len(buf) > 0 {
453 v, n := wire.ConsumeFixed32(buf)
454 if n < 0 {
455 return 0, wire.ParseError(n)
456 }
457 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700458 list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
Damien Neilba23aa52018-12-07 14:38:17 -0800459 }
460 return n, nil
461 }
462 if wtyp != wire.Fixed32Type {
463 return 0, errUnknown
464 }
465 v, n := wire.ConsumeFixed32(b)
466 if n < 0 {
467 return 0, wire.ParseError(n)
468 }
Damien Neilc5060d22019-08-22 17:01:56 -0700469 list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
Damien Neil8c86fc52019-06-19 09:28:29 -0700470 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800471 case protoreflect.Sfixed64Kind:
472 if wtyp == wire.BytesType {
473 buf, n := wire.ConsumeBytes(b)
474 if n < 0 {
475 return 0, wire.ParseError(n)
476 }
477 for len(buf) > 0 {
478 v, n := wire.ConsumeFixed64(buf)
479 if n < 0 {
480 return 0, wire.ParseError(n)
481 }
482 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700483 list.Append(protoreflect.ValueOfInt64(int64(v)))
Damien Neilba23aa52018-12-07 14:38:17 -0800484 }
485 return n, nil
486 }
487 if wtyp != wire.Fixed64Type {
488 return 0, errUnknown
489 }
490 v, n := wire.ConsumeFixed64(b)
491 if n < 0 {
492 return 0, wire.ParseError(n)
493 }
Damien Neilc5060d22019-08-22 17:01:56 -0700494 list.Append(protoreflect.ValueOfInt64(int64(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700495 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800496 case protoreflect.Fixed64Kind:
497 if wtyp == wire.BytesType {
498 buf, n := wire.ConsumeBytes(b)
499 if n < 0 {
500 return 0, wire.ParseError(n)
501 }
502 for len(buf) > 0 {
503 v, n := wire.ConsumeFixed64(buf)
504 if n < 0 {
505 return 0, wire.ParseError(n)
506 }
507 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700508 list.Append(protoreflect.ValueOfUint64(v))
Damien Neilba23aa52018-12-07 14:38:17 -0800509 }
510 return n, nil
511 }
512 if wtyp != wire.Fixed64Type {
513 return 0, errUnknown
514 }
515 v, n := wire.ConsumeFixed64(b)
516 if n < 0 {
517 return 0, wire.ParseError(n)
518 }
Damien Neilc5060d22019-08-22 17:01:56 -0700519 list.Append(protoreflect.ValueOfUint64(v))
Damien Neil8c86fc52019-06-19 09:28:29 -0700520 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800521 case protoreflect.DoubleKind:
522 if wtyp == wire.BytesType {
523 buf, n := wire.ConsumeBytes(b)
524 if n < 0 {
525 return 0, wire.ParseError(n)
526 }
527 for len(buf) > 0 {
528 v, n := wire.ConsumeFixed64(buf)
529 if n < 0 {
530 return 0, wire.ParseError(n)
531 }
532 buf = buf[n:]
Damien Neilc5060d22019-08-22 17:01:56 -0700533 list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
Damien Neilba23aa52018-12-07 14:38:17 -0800534 }
535 return n, nil
536 }
537 if wtyp != wire.Fixed64Type {
538 return 0, errUnknown
539 }
540 v, n := wire.ConsumeFixed64(b)
541 if n < 0 {
542 return 0, wire.ParseError(n)
543 }
Damien Neilc5060d22019-08-22 17:01:56 -0700544 list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700545 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800546 case protoreflect.StringKind:
547 if wtyp != wire.BytesType {
548 return 0, errUnknown
549 }
550 v, n := wire.ConsumeBytes(b)
551 if n < 0 {
552 return 0, wire.ParseError(n)
553 }
Joe Tsaic51e2e02019-07-13 00:44:41 -0700554 if strs.EnforceUTF8(fd) && !utf8.Valid(v) {
Damien Neil8c86fc52019-06-19 09:28:29 -0700555 return 0, errors.InvalidUTF8(string(fd.FullName()))
Damien Neilbc310b52019-04-11 11:46:55 -0700556 }
Damien Neilc5060d22019-08-22 17:01:56 -0700557 list.Append(protoreflect.ValueOfString(string(v)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700558 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800559 case protoreflect.BytesKind:
560 if wtyp != wire.BytesType {
561 return 0, errUnknown
562 }
563 v, n := wire.ConsumeBytes(b)
564 if n < 0 {
565 return 0, wire.ParseError(n)
566 }
Damien Neil5366f822019-12-05 14:54:35 -0800567 list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...)))
Damien Neil8c86fc52019-06-19 09:28:29 -0700568 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800569 case protoreflect.MessageKind:
570 if wtyp != wire.BytesType {
571 return 0, errUnknown
572 }
573 v, n := wire.ConsumeBytes(b)
574 if n < 0 {
575 return 0, wire.ParseError(n)
576 }
Damien Neild91c4222019-09-04 10:46:00 -0700577 m := list.NewElement()
578 if err := o.unmarshalMessage(v, m.Message()); err != nil {
Damien Neilba23aa52018-12-07 14:38:17 -0800579 return 0, err
580 }
Damien Neild91c4222019-09-04 10:46:00 -0700581 list.Append(m)
Damien Neil8c86fc52019-06-19 09:28:29 -0700582 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800583 case protoreflect.GroupKind:
584 if wtyp != wire.StartGroupType {
585 return 0, errUnknown
586 }
Joe Tsai378c1322019-04-25 23:48:08 -0700587 v, n := wire.ConsumeGroup(fd.Number(), b)
Damien Neilba23aa52018-12-07 14:38:17 -0800588 if n < 0 {
589 return 0, wire.ParseError(n)
590 }
Damien Neild91c4222019-09-04 10:46:00 -0700591 m := list.NewElement()
592 if err := o.unmarshalMessage(v, m.Message()); err != nil {
Damien Neilba23aa52018-12-07 14:38:17 -0800593 return 0, err
594 }
Damien Neild91c4222019-09-04 10:46:00 -0700595 list.Append(m)
Damien Neil8c86fc52019-06-19 09:28:29 -0700596 return n, nil
Damien Neilba23aa52018-12-07 14:38:17 -0800597 default:
598 return 0, errUnknown
599 }
600}
Damien Neil5366f822019-12-05 14:54:35 -0800601
602// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices.
603var emptyBuf [0]byte