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

Method unmarshalMessage

encoding/prototext/decode.go:106–256  ·  view source on GitHub ↗

unmarshalMessage unmarshals into the given protoreflect.Message.

(m protoreflect.Message, checkDelims bool)

Source from the content-addressed store, hash-verified

104
105// unmarshalMessage unmarshals into the given protoreflect.Message.
106func (d decoder) unmarshalMessage(m protoreflect.Message, checkDelims bool) error {
107 messageDesc := m.Descriptor()
108 if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {
109 return errors.New("no support for proto1 MessageSets")
110 }
111
112 if messageDesc.FullName() == genid.Any_message_fullname {
113 return d.unmarshalAny(m, checkDelims)
114 }
115
116 if checkDelims {
117 tok, err := d.Read()
118 if err != nil {
119 return err
120 }
121
122 if tok.Kind() != text.MessageOpen {
123 return d.unexpectedTokenError(tok)
124 }
125 }
126
127 var seenNums set.Ints
128 var seenOneofs set.Ints
129 fieldDescs := messageDesc.Fields()
130
131 for {
132 // Read field name.
133 tok, err := d.Read()
134 if err != nil {
135 return err
136 }
137 switch typ := tok.Kind(); typ {
138 case text.Name:
139 // Continue below.
140 case text.EOF:
141 if checkDelims {
142 return text.ErrUnexpectedEOF
143 }
144 return nil
145 default:
146 if checkDelims && typ == text.MessageClose {
147 return nil
148 }
149 return d.unexpectedTokenError(tok)
150 }
151
152 // Resolve the field descriptor.
153 var name protoreflect.Name
154 var fd protoreflect.FieldDescriptor
155 var xt protoreflect.ExtensionType
156 var xtErr error
157 var isFieldNumberName bool
158
159 switch tok.NameKind() {
160 case text.IdentName:
161 name = protoreflect.Name(tok.IdentName())
162 fd = fieldDescs.ByTextName(string(name))
163

Callers 5

unmarshalMethod · 0.95
unmarshalSingularMethod · 0.95
unmarshalListMethod · 0.95
unmarshalMapMethod · 0.95
unmarshalExpandedAnyMethod · 0.95

Calls 15

unmarshalAnyMethod · 0.95
KindMethod · 0.95
unexpectedTokenErrorMethod · 0.95
newErrorMethod · 0.95
TypeDescriptorMethod · 0.95
NumberMethod · 0.95
ContainingMessageMethod · 0.95
skipValueMethod · 0.95
IsListMethod · 0.95
syntaxErrorMethod · 0.95
unmarshalListMethod · 0.95
IsMapMethod · 0.95

Tested by

no test coverage detected