valuate.go 959 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package valuate
  2. import (
  3. "fmt"
  4. "github.com/Knetic/govaluate"
  5. "github.com/spf13/cast"
  6. )
  7. type (
  8. Expression = *govaluate.EvaluableExpression
  9. )
  10. func EvalInt32(expression Expression, args ...any) (int32, bool) {
  11. if expression == nil {
  12. return 0, false
  13. }
  14. // build parameters
  15. parameters := make(map[string]any)
  16. for i, arg := range args {
  17. key := fmt.Sprintf("x%d", i+1)
  18. parameters[key] = arg
  19. }
  20. evaluate, err := expression.Evaluate(parameters)
  21. if err != nil {
  22. return 0, false
  23. }
  24. result := cast.ToInt32(evaluate)
  25. return result, true
  26. }
  27. func EvalInt64(expression Expression, args ...any) (int64, bool) {
  28. if expression == nil {
  29. return 0, false
  30. }
  31. // build parameters
  32. parameters := make(map[string]any)
  33. for i, arg := range args {
  34. key := fmt.Sprintf("x%d", i+1)
  35. parameters[key] = arg
  36. }
  37. evaluate, err := expression.Evaluate(parameters)
  38. if err != nil {
  39. return 0, false
  40. }
  41. result := cast.ToInt64(evaluate)
  42. return result, true
  43. }