forked from lug/matterbridge
Update vendor (#1560)
This commit is contained in:
35
vendor/github.com/d5/tengo/v2/eval.go
generated
vendored
Normal file
35
vendor/github.com/d5/tengo/v2/eval.go
generated
vendored
Normal file
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user