Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/river/vm/constant.go
4096 views
1
package vm
2
3
import (
4
"fmt"
5
"strconv"
6
7
"github.com/grafana/agent/pkg/river/internal/value"
8
"github.com/grafana/agent/pkg/river/token"
9
)
10
11
func valueFromLiteral(lit string, tok token.Token) (value.Value, error) {
12
// NOTE(rfratto): this function should never return an error, since the
13
// parser only produces valid tokens; it can only fail if a user hand-builds
14
// an AST with invalid literals.
15
16
switch tok {
17
case token.NULL:
18
return value.Null, nil
19
20
case token.NUMBER:
21
v, err := strconv.ParseInt(lit, 0, 64)
22
if err != nil {
23
return value.Null, err
24
}
25
return value.Int(v), nil
26
27
case token.FLOAT:
28
v, err := strconv.ParseFloat(lit, 64)
29
if err != nil {
30
return value.Null, err
31
}
32
return value.Float(v), nil
33
34
case token.STRING:
35
v, err := strconv.Unquote(lit)
36
if err != nil {
37
return value.Null, err
38
}
39
return value.String(v), nil
40
41
case token.BOOL:
42
switch lit {
43
case "true":
44
return value.Bool(true), nil
45
case "false":
46
return value.Bool(false), nil
47
default:
48
return value.Null, fmt.Errorf("invalid boolean literal %q", lit)
49
}
50
default:
51
panic(fmt.Sprintf("%v is not a valid token", tok))
52
}
53
}
54
55