Projects STRLCPY afrog Commits 2a7646a1
🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
  • ■ ■ ■ ■ ■
    pkg/core/cel.go
    skipped 27 lines
    28 28   return c.programOptions
    29 29  }
    30 30   
    31  -// var CustomLibPool = sync.Pool{
    32  -// New: func() interface{} {
    33  -// return CustomLib{}
    34  -// },
    35  -// }
    36  - 
    37 31  func (c *CustomLib) Run(expression string, variablemap map[string]interface{}, call runCallback) {
    38 32   env, err := c.NewCelEnv()
    39 33   if err != nil {
    skipped 27 lines
    67 61   
    68 62  type runCallback func(interface{}, error)
    69 63   
    70  -// Step 1: 创建 cel 库
    71 64  func NewCustomLib() *CustomLib {
    72 65   c := &CustomLib{}
    73 66   reg := types.NewEmptyRegistry()
    skipped 2 lines
    76 69   return c
    77 70  }
    78 71   
    79  -// Step 2: 创建 cel 环境
    80 72  func (c *CustomLib) NewCelEnv() (env *cel.Env, err error) {
    81 73   env, err = cel.NewEnv(cel.Lib(c))
    82 74   return env, err
    83 75  }
    84 76   
    85  -// Step 3: 执行表达式
    86  -// @env cel.Env cel环境
    87  -// @expression string gocel表达式
    88  -// @params map[string]interface 表达式变量值
    89 77  func Eval(env *cel.Env, expression string, params map[string]interface{}) (ref.Val, error) {
    90 78   ast, iss := env.Compile(expression)
    91 79   if iss.Err() != nil {
    skipped 13 lines
    105 93   return out, nil
    106 94  }
    107 95   
    108  -// 如果有set:追加set变量到 cel options
    109  -// 这里得注意下 reverse的顺序问题 map可能是随机的
    110 96  func (c *CustomLib) WriteRuleSetOptions(args yaml.MapSlice) {
    111 97   for _, v := range args {
    112 98   key := v.Key.(string)
    113 99   value := v.Value
    114  - // 在执行之前是不知道变量的类型的,所以统一声明为字符型
    115  - // 所以randomInt虽然返回的是int型,在运算中却被当作字符型进行计算,需要重载string_*_string
     100 + 
    116 101   var d *exprpb.Decl
    117 102   switch vv := value.(type) {
    118 103   case int64:
    skipped 44 lines
Please wait...
Page is in error, reload to recover