cloudflare/pint

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v0.1.1

Branches

Tags

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

Clone

HTTPS

Download ZIP

internal/parser/decode.go

38lines · modecode

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