|
- package template
-
- import (
- "errors"
- "fmt"
-
- "gopkg.in/Knetic/govaluate.v3"
- )
-
- // ErrNonFloatValue is returned when the result of the expression is not a float64.
- var ErrNonFloatValue = errors.New("failed to cast expression result for float64")
-
- // Value describes a measurement or dimension in the templates.
- type Value string
-
- // Evaluate a Value as [govaluate.EvaluateExpression] in combination with the provided parameters.
- func (v *Value) Evaluate(parameters govaluate.MapParameters, funcs map[string]govaluate.ExpressionFunction) (float64, error) {
- if v == nil {
- return 0, nil
- }
-
- expression, err := govaluate.NewEvaluableExpressionWithFunctions(string(*v), funcs)
- if err != nil {
- return 0, fmt.Errorf("create new evaluable expression for %q: %w", *v, err)
- }
-
- result, err := expression.Evaluate(parameters)
- if err != nil {
- return 0, fmt.Errorf("evaluable expression for %q: %w", *v, err)
- }
-
- f, ok := result.(float64)
- if !ok {
- return 0, fmt.Errorf("cast %v to float: %w", result, ErrNonFloatValue)
- }
-
- return f, nil
- }
|