From 44f3e2557dad86129419ed098c29e67638519f4f Mon Sep 17 00:00:00 2001 From: Wim Date: Sat, 31 Jul 2021 18:27:55 +0200 Subject: Update vendor (#1560) --- vendor/github.com/d5/tengo/v2/eval.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 vendor/github.com/d5/tengo/v2/eval.go (limited to 'vendor/github.com/d5/tengo/v2/eval.go') diff --git a/vendor/github.com/d5/tengo/v2/eval.go b/vendor/github.com/d5/tengo/v2/eval.go new file mode 100644 index 00000000..9ce9b2a7 --- /dev/null +++ b/vendor/github.com/d5/tengo/v2/eval.go @@ -0,0 +1,35 @@ +package tengo + +import ( + "context" + "fmt" + "strings" +) + +// Eval compiles and executes given expr with params, and returns an +// evaluated value. expr must be an expression. Otherwise it will fail to +// compile. Expression must not use or define variable "__res__" as it's +// reserved for the internal usage. +func Eval( + ctx context.Context, + expr string, + params map[string]interface{}, +) (interface{}, error) { + expr = strings.TrimSpace(expr) + if expr == "" { + return nil, fmt.Errorf("empty expression") + } + + script := NewScript([]byte(fmt.Sprintf("__res__ := (%s)", expr))) + for pk, pv := range params { + err := script.Add(pk, pv) + if err != nil { + return nil, fmt.Errorf("script add: %w", err) + } + } + compiled, err := script.RunContext(ctx) + if err != nil { + return nil, fmt.Errorf("script run: %w", err) + } + return compiled.Get("__res__").Value(), nil +} -- cgit v1.2.3