mirror of
https://gitee.com/rulego/streamsql.git
synced 2026-03-20 17:20:36 +00:00
31 lines
553 B
Go
31 lines
553 B
Go
package parser
|
|
|
|
import (
|
|
"github.com/expr-lang/expr"
|
|
"github.com/expr-lang/expr/vm"
|
|
)
|
|
|
|
type Condition interface {
|
|
Evaluate(env interface{}) bool
|
|
}
|
|
|
|
type ExprCondition struct {
|
|
program *vm.Program
|
|
}
|
|
|
|
func NewExprCondition(expression string) (Condition, error) {
|
|
program, err := expr.Compile(expression)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &ExprCondition{program: program}, nil
|
|
}
|
|
|
|
func (ec *ExprCondition) Evaluate(env interface{}) bool {
|
|
result, err := expr.Run(ec.program, env)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return result.(bool)
|
|
}
|