(c context.Context)
| 96 | } |
| 97 | |
| 98 | func (p *parser) parseBracket(c context.Context) (keys []gval.Evaluable, seperator rune, err error) { |
| 99 | for { |
| 100 | scan := p.Scan() |
| 101 | skipScan := false |
| 102 | switch scan { |
| 103 | case '?': |
| 104 | skipScan = true |
| 105 | case ':': |
| 106 | i := float64(0) |
| 107 | if len(keys) == 1 { |
| 108 | i = math.MaxInt32 |
| 109 | } |
| 110 | keys = append(keys, p.Const(i)) |
| 111 | skipScan = true |
| 112 | case '*': |
| 113 | if p.Scan() != ']' { |
| 114 | return nil, 0, p.Expected("JSON bracket star", ']') |
| 115 | } |
| 116 | return []gval.Evaluable{}, 0, nil |
| 117 | case ']': |
| 118 | if seperator == ':' { |
| 119 | skipScan = true |
| 120 | break |
| 121 | } |
| 122 | fallthrough |
| 123 | default: |
| 124 | p.Camouflage("jsonpath brackets") |
| 125 | key, err := p.ParseExpression(c) |
| 126 | if err != nil { |
| 127 | return nil, 0, err |
| 128 | } |
| 129 | keys = append(keys, key) |
| 130 | } |
| 131 | if !skipScan { |
| 132 | scan = p.Scan() |
| 133 | } |
| 134 | if seperator == 0 { |
| 135 | seperator = scan |
| 136 | } |
| 137 | switch scan { |
| 138 | case ':', ',': |
| 139 | case ']': |
| 140 | return |
| 141 | case '?': |
| 142 | if len(keys) != 0 { |
| 143 | return nil, 0, p.Expected("JSON filter", ']') |
| 144 | } |
| 145 | default: |
| 146 | return nil, 0, p.Expected("JSON bracket separator", ':', ',') |
| 147 | } |
| 148 | if seperator != scan { |
| 149 | return nil, 0, fmt.Errorf("mixed %v and %v in JSON bracket", seperator, scan) |
| 150 | } |
| 151 | } |
| 152 | } |
| 153 | |
| 154 | func (p *parser) parseMapper(c context.Context) error { |
| 155 | scan := p.Scan() |
no outgoing calls
no test coverage detected