(fields []Field)
| 331 | } |
| 332 | |
| 333 | func (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 | |
| 382 | func (p *Parser) parseNormalFields(st *Stack, fields []Field) ([]Field, error) { |
| 383 | if !p.peek(itemName) { |
no test coverage detected