MCPcopy
hub / github.com/pquerna/ffjson / scanField

Method scanField

fflib/v1/lexer.go:482–559  ·  view source on GitHub ↗
(start FFTok, capture bool)

Source from the content-addressed store, hash-verified

480}
481
482func (ffl *FFLexer) scanField(start FFTok, capture bool) ([]byte, error) {
483 switch start {
484 case FFTok_left_brace,
485 FFTok_left_bracket:
486 {
487 end := FFTok_right_brace
488 if start == FFTok_left_bracket {
489 end = FFTok_right_bracket
490 if capture {
491 ffl.Output.WriteByte('{')
492 }
493 } else {
494 if capture {
495 ffl.Output.WriteByte('[')
496 }
497 }
498
499 depth := 1
500 if capture {
501 ffl.captureAll = true
502 }
503 // TODO: work.
504 scanloop:
505 for {
506 tok := ffl.Scan()
507 //fmt.Printf("capture-token: %v end: %v depth: %v\n", tok, end, depth)
508 switch tok {
509 case FFTok_eof:
510 return nil, errors.New("ffjson: unexpected EOF")
511 case FFTok_error:
512 if ffl.BigError != nil {
513 return nil, ffl.BigError
514 }
515 return nil, ffl.Error.ToError()
516 case end:
517 depth--
518 if depth == 0 {
519 break scanloop
520 }
521 case start:
522 depth++
523 }
524 }
525
526 if capture {
527 ffl.captureAll = false
528 }
529
530 if capture {
531 return ffl.Output.Bytes(), nil
532 } else {
533 return nil, nil
534 }
535 }
536 case FFTok_bool,
537 FFTok_integer,
538 FFTok_null,
539 FFTok_double:

Callers 2

CaptureFieldMethod · 0.95
SkipFieldMethod · 0.95

Calls 6

ScanMethod · 0.95
WriteJsonFunction · 0.85
WriteByteMethod · 0.80
ToErrorMethod · 0.80
BytesMethod · 0.65
ResetMethod · 0.65

Tested by

no test coverage detected