MCPcopy
hub / github.com/protocolbuffers/protobuf-go / unmarshalList

Method unmarshalList

encoding/prototext/decode.go:358–435  ·  view source on GitHub ↗

unmarshalList unmarshals into given protoreflect.List. A list value can either be in [] syntax or simply just a single scalar/message value.

(fd protoreflect.FieldDescriptor, list protoreflect.List)

Source from the content-addressed store, hash-verified

356// unmarshalList unmarshals into given protoreflect.List. A list value can
357// either be in [] syntax or simply just a single scalar/message value.
358func (d decoder) unmarshalList(fd protoreflect.FieldDescriptor, list protoreflect.List) error {
359 tok, err := d.Peek()
360 if err != nil {
361 return err
362 }
363
364 switch fd.Kind() {
365 case protoreflect.MessageKind, protoreflect.GroupKind:
366 switch tok.Kind() {
367 case text.ListOpen:
368 d.Read()
369 for {
370 tok, err := d.Peek()
371 if err != nil {
372 return err
373 }
374
375 switch tok.Kind() {
376 case text.ListClose:
377 d.Read()
378 return nil
379 case text.MessageOpen:
380 pval := list.NewElement()
381 if err := d.unmarshalMessage(pval.Message(), true); err != nil {
382 return err
383 }
384 list.Append(pval)
385 default:
386 return d.unexpectedTokenError(tok)
387 }
388 }
389
390 case text.MessageOpen:
391 pval := list.NewElement()
392 if err := d.unmarshalMessage(pval.Message(), true); err != nil {
393 return err
394 }
395 list.Append(pval)
396 return nil
397 }
398
399 default:
400 switch tok.Kind() {
401 case text.ListOpen:
402 d.Read()
403 for {
404 tok, err := d.Peek()
405 if err != nil {
406 return err
407 }
408
409 switch tok.Kind() {
410 case text.ListClose:
411 d.Read()
412 return nil
413 case text.Scalar:
414 pval, err := d.unmarshalScalar(fd)
415 if err != nil {

Callers 1

unmarshalMessageMethod · 0.95

Calls 9

unmarshalMessageMethod · 0.95
unexpectedTokenErrorMethod · 0.95
unmarshalScalarMethod · 0.95
KindMethod · 0.65
NewElementMethod · 0.65
MessageMethod · 0.65
AppendMethod · 0.65
PeekMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected