MCPcopy
hub / github.com/dosco/graphjin / parseFields

Method parseFields

core/internal/graph/parse.go:333–380  ·  view source on GitHub ↗
(fields []Field)

Source from the content-addressed store, hash-verified

331}
332
333func (p *Parser) parseFields(fields []Field) ([]Field, error) {
334 var err error
335 st := NewStack()
336
337 if !p.peek(itemName, itemSpread) {
338 return nil, p.tokErr(`field name or ...Fragment`)
339 }
340
341 for {
342 if p.peek(itemEOF) {
343 p.ignore()
344 return nil, errors.New("invalid query: end reached before query was closed")
345 }
346
347 if p.peek(itemObjClose) {
348 if st.Len() != 0 {
349 p.ignore()
350 st.Pop()
351 continue
352 } else {
353 break
354 }
355 }
356
357 if len(fields) >= maxFields {
358 return nil, fmt.Errorf("too many fields (max %d)", maxFields)
359 }
360
361 isFrag := false
362
363 if p.peek(itemSpread) {
364 p.ignore()
365 isFrag = true
366 }
367
368 if isFrag {
369 fields, err = p.parseFragmentFields(st, fields)
370 } else {
371 fields, err = p.parseNormalFields(st, fields)
372 }
373
374 if err != nil {
375 return nil, err
376 }
377 }
378
379 return fields, nil
380}
381
382func (p *Parser) parseNormalFields(st *Stack, fields []Field) ([]Field, error) {
383 if !p.peek(itemName) {

Callers 2

parseFragmentMethod · 0.95
parseOpMethod · 0.95

Calls 8

peekMethod · 0.95
tokErrMethod · 0.95
ignoreMethod · 0.95
LenMethod · 0.95
PopMethod · 0.95
parseFragmentFieldsMethod · 0.95
parseNormalFieldsMethod · 0.95
NewStackFunction · 0.85

Tested by

no test coverage detected