MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / try_parse_vector_matching

Method try_parse_vector_matching

nodedb/src/control/promql/parser.rs:369–396  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

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");

Callers 1

parse_exprMethod · 0.80

Calls 3

try_keywordMethod · 0.80
parse_label_listMethod · 0.80
cloneMethod · 0.45

Tested by

no test coverage detected