cloudflare/pint

Public

mirrored from https://github.com/cloudflare/pintAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v0.33.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

internal/parser/decode.go

41lines · modecode

1package parser
2
3import (
4 "errors"
5
6 promparser "github.com/prometheus/prometheus/promql/parser"
7)
8
9func DecodeExpr(expr string) (*PromQLNode, error) {
10 node, err := promparser.ParseExpr(expr)
11 if err != nil {
12 pqe := PromQLError{Err: err}
13 pqe.node = &PromQLNode{
14 Expr: expr,
15 Node: node,
16 }
17 var perrs promparser.ParseErrors
18 if ok := errors.As(err, &perrs); ok {
19 for _, perr := range perrs {
20 pqe.Err = perr.Err
21 pqe.node.Expr = perr.Query
22 }
23 }
24 return nil, pqe
25 }
26
27 pn := PromQLNode{
28 Expr: expr,
29 Node: node,
30 }
31
32 for _, child := range promparser.Children(node) {
33 c, err := DecodeExpr(child.String())
34 if err != nil {
35 return nil, err
36 }
37 pn.Children = append(pn.Children, c)
38 }
39
40 return &pn, nil
41}
42