| 346 | } |
| 347 | |
| 348 | fn peek_binop(&self) -> Option<BinOp> { |
| 349 | match self.peek() { |
| 350 | Token::Add => Some(BinOp::Add), |
| 351 | Token::Sub => Some(BinOp::Sub), |
| 352 | Token::Mul => Some(BinOp::Mul), |
| 353 | Token::Div => Some(BinOp::Div), |
| 354 | Token::Mod => Some(BinOp::Mod), |
| 355 | Token::Pow => Some(BinOp::Pow), |
| 356 | Token::Eq => Some(BinOp::Eq), |
| 357 | Token::Neq => Some(BinOp::Neq), |
| 358 | Token::Lt => Some(BinOp::Lt), |
| 359 | Token::Gt => Some(BinOp::Gt), |
| 360 | Token::Lte => Some(BinOp::Lte), |
| 361 | Token::Gte => Some(BinOp::Gte), |
| 362 | Token::Ident(s) if s.eq_ignore_ascii_case("and") => Some(BinOp::And), |
| 363 | Token::Ident(s) if s.eq_ignore_ascii_case("or") => Some(BinOp::Or), |
| 364 | Token::Ident(s) if s.eq_ignore_ascii_case("unless") => Some(BinOp::Unless), |
| 365 | _ => None, |
| 366 | } |
| 367 | } |
| 368 | |
| 369 | fn try_parse_vector_matching(&mut self) -> Result<Option<VectorMatching>, PromqlError> { |
| 370 | let has_on = self.try_keyword("on"); |