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

Method parse_primary

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

Source from the content-addressed store, hash-verified

152 }
153
154 fn parse_primary(&mut self) -> Result<Expr, PromqlError> {
155 match self.peek().clone() {
156 Token::Number(n) => {
157 self.advance();
158 Ok(Expr::Scalar(n))
159 }
160 Token::String(s) => {
161 self.advance();
162 Ok(Expr::StringLiteral(s))
163 }
164 Token::LParen => {
165 self.advance();
166 let expr = self.parse_expr(0)?;
167 self.expect(&Token::RParen)?;
168 Ok(Expr::Paren(Box::new(expr)))
169 }
170 Token::LBrace => {
171 let matchers = self.parse_label_matchers()?;
172 Ok(Expr::VectorSelector {
173 name: None,
174 matchers,
175 offset: None,
176 })
177 }
178 Token::Ident(name) => {
179 if let Some(agg_op) = parse_agg_op(&name) {
180 return self.parse_aggregation(agg_op);
181 }
182 self.advance();
183 self.parse_ident_continuation(name)
184 }
185 other => Err(PromqlError::UnexpectedToken {
186 expected: "expression".to_string(),
187 found: format!("{other:?}"),
188 }),
189 }
190 }
191
192 fn parse_ident_continuation(&mut self, name: String) -> Result<Expr, PromqlError> {
193 if matches!(self.peek(), Token::LParen) {

Callers 1

parse_postfixMethod · 0.80

Calls 10

parse_agg_opFunction · 0.85
parse_exprMethod · 0.80
parse_label_matchersMethod · 0.80
parse_aggregationMethod · 0.80
to_stringMethod · 0.80
cloneMethod · 0.45
peekMethod · 0.45
advanceMethod · 0.45
expectMethod · 0.45

Tested by

no test coverage detected