(&mut self)
| 367 | } |
| 368 | |
| 369 | fn try_parse_vector_matching(&mut self) -> Result<Option<VectorMatching>, PromqlError> { |
| 370 | let has_on = self.try_keyword("on"); |
| 371 | let has_ignoring = !has_on && self.try_keyword("ignoring"); |
| 372 | if !has_on && !has_ignoring { |
| 373 | return Ok(None); |
| 374 | } |
| 375 | let labels = self.parse_label_list()?; |
| 376 | let mut matching = VectorMatching { |
| 377 | card: MatchCard::OneToOne, |
| 378 | on: if has_on { labels.clone() } else { vec![] }, |
| 379 | ignoring: if has_ignoring { labels } else { vec![] }, |
| 380 | group_left: vec![], |
| 381 | group_right: vec![], |
| 382 | }; |
| 383 | |
| 384 | if self.try_keyword("group_left") { |
| 385 | matching.card = MatchCard::ManyToOne; |
| 386 | if matches!(self.peek(), Token::LParen) { |
| 387 | matching.group_left = self.parse_label_list()?; |
| 388 | } |
| 389 | } else if self.try_keyword("group_right") { |
| 390 | matching.card = MatchCard::OneToMany; |
| 391 | if matches!(self.peek(), Token::LParen) { |
| 392 | matching.group_right = self.parse_label_list()?; |
| 393 | } |
| 394 | } |
| 395 | Ok(Some(matching)) |
| 396 | } |
| 397 | |
| 398 | fn try_parse_set_matching(&mut self) -> Result<Option<VectorMatching>, PromqlError> { |
| 399 | let has_on = self.try_keyword("on"); |
no test coverage detected