(tokens: &[String], pos: &mut usize)
| 153 | } |
| 154 | |
| 155 | fn parse_and_expr(tokens: &[String], pos: &mut usize) -> Result<RlsPredicate, PredicateParseError> { |
| 156 | let mut left = parse_atom(tokens, pos)?; |
| 157 | |
| 158 | while *pos < tokens.len() && tokens[*pos].to_uppercase() == "AND" { |
| 159 | *pos += 1; |
| 160 | let right = parse_atom(tokens, pos)?; |
| 161 | left = match left { |
| 162 | RlsPredicate::And(mut children) => { |
| 163 | children.push(right); |
| 164 | RlsPredicate::And(children) |
| 165 | } |
| 166 | _ => RlsPredicate::And(vec![left, right]), |
| 167 | }; |
| 168 | } |
| 169 | |
| 170 | Ok(left) |
| 171 | } |
| 172 | |
| 173 | fn parse_atom(tokens: &[String], pos: &mut usize) -> Result<RlsPredicate, PredicateParseError> { |
| 174 | if *pos >= tokens.len() { |
no test coverage detected