package valuate import ( "fmt" "github.com/Knetic/govaluate" "github.com/spf13/cast" ) type ( Expression = *govaluate.EvaluableExpression ) func EvalInt32(expression Expression, args ...any) (int32, bool) { if expression == nil { return 0, false } // build parameters parameters := make(map[string]any) for i, arg := range args { key := fmt.Sprintf("x%d", i+1) parameters[key] = arg } evaluate, err := expression.Evaluate(parameters) if err != nil { return 0, false } result := cast.ToInt32(evaluate) return result, true } func EvalInt64(expression Expression, args ...any) (int64, bool) { if expression == nil { return 0, false } // build parameters parameters := make(map[string]any) for i, arg := range args { key := fmt.Sprintf("x%d", i+1) parameters[key] = arg } evaluate, err := expression.Evaluate(parameters) if err != nil { return 0, false } result := cast.ToInt64(evaluate) return result, true }