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

Method parseNext

internal/encoding/json/decode.go:160–213  ·  view source on GitHub ↗

parseNext parses for the next JSON token. It returns a Token object for different types, except for Name. It does not handle whether the next token is in a valid sequence or not.

()

Source from the content-addressed store, hash-verified

158// different types, except for Name. It does not handle whether the next token
159// is in a valid sequence or not.
160func (d *Decoder) parseNext() (Token, error) {
161 // Trim leading spaces.
162 d.consume(0)
163
164 in := d.in
165 if len(in) == 0 {
166 return d.consumeToken(EOF, 0), nil
167 }
168
169 switch in[0] {
170 case 'n':
171 if n := matchWithDelim("null", in); n != 0 {
172 return d.consumeToken(Null, n), nil
173 }
174
175 case 't':
176 if n := matchWithDelim("true", in); n != 0 {
177 return d.consumeBoolToken(true, n), nil
178 }
179
180 case 'f':
181 if n := matchWithDelim("false", in); n != 0 {
182 return d.consumeBoolToken(false, n), nil
183 }
184
185 case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
186 if n, ok := parseNumber(in); ok {
187 return d.consumeToken(Number, n), nil
188 }
189
190 case '"':
191 s, n, err := d.parseString(in)
192 if err != nil {
193 return Token{}, err
194 }
195 return d.consumeStringToken(s, n), nil
196
197 case '{':
198 return d.consumeToken(ObjectOpen, 1), nil
199
200 case '}':
201 return d.consumeToken(ObjectClose, 1), nil
202
203 case '[':
204 return d.consumeToken(ArrayOpen, 1), nil
205
206 case ']':
207 return d.consumeToken(ArrayClose, 1), nil
208
209 case ',':
210 return d.consumeToken(comma, 1), nil
211 }
212 return Token{}, d.newSyntaxError(d.currPos(), "invalid value %s", errRegexp.Find(in))
213}
214
215// newSyntaxError returns an error with line and column information useful for
216// syntax errors.

Callers 1

ReadMethod · 0.95

Calls 9

consumeMethod · 0.95
consumeTokenMethod · 0.95
consumeBoolTokenMethod · 0.95
parseStringMethod · 0.95
consumeStringTokenMethod · 0.95
newSyntaxErrorMethod · 0.95
currPosMethod · 0.95
matchWithDelimFunction · 0.85
parseNumberFunction · 0.70

Tested by

no test coverage detected