(pos Pos)
| 695 | } |
| 696 | |
| 697 | func (p *Parser) parseMapLiteral(pos Pos) (*MapLiteral, error) { |
| 698 | if err := p.expectTokenKind(TokenKindLBrace); err != nil { |
| 699 | return nil, err |
| 700 | } |
| 701 | |
| 702 | keyValues := make([]KeyValue, 0) |
| 703 | for !p.lexer.isEOF() && !p.matchTokenKind(TokenKindRBrace) { |
| 704 | key, err := p.parseString(p.Pos()) |
| 705 | if err != nil { |
| 706 | return nil, err |
| 707 | } |
| 708 | if err := p.expectTokenKind(TokenKindColon); err != nil { |
| 709 | return nil, err |
| 710 | } |
| 711 | value, err := p.parseExpr(p.Pos()) |
| 712 | if err != nil { |
| 713 | return nil, err |
| 714 | } |
| 715 | keyValues = append(keyValues, KeyValue{ |
| 716 | Key: *key, |
| 717 | Value: value, |
| 718 | }) |
| 719 | if p.tryConsumeTokenKind(TokenKindComma) == nil { |
| 720 | break |
| 721 | } |
| 722 | } |
| 723 | rightBracePos := p.Pos() |
| 724 | if err := p.expectTokenKind(TokenKindRBrace); err != nil { |
| 725 | return nil, err |
| 726 | } |
| 727 | return &MapLiteral{ |
| 728 | LBracePos: pos, |
| 729 | RBracePos: rightBracePos, |
| 730 | KeyValues: keyValues, |
| 731 | }, nil |
| 732 | } |
| 733 | |
| 734 | func (p *Parser) parseQueryParam(pos Pos) (*QueryParam, error) { |
| 735 | if err := p.expectTokenKind(TokenKindLBrace); err != nil { |
no test coverage detected