You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package script
import ( "log" "strconv" "strings" )
type Condition struct { Scope string `json:"scope"` Key string `json:"key"` Op string `json:"op"` Value string `json:"value,omitempty"` Not bool `json:"not,omitempty"` }
func (c *Condition) Check(set VariableSet, match string, devices []string) bool { var value string switch c.Scope { case "global": value = set.Global(c.Key) case "match": value = set.Match(match, c.Key) case "devices": value = set.Devices(devices, c.Key) default: return c.Not }
valueInt, valueIntErr := strconv.ParseInt(value, 10, 64) targetInt, _ := strconv.ParseInt(c.Value, 10, 64)
switch c.Op { case "eq": return !c.Not == (value == c.Value) case "neq": return !c.Not == (value != c.Value) case "gt": return !c.Not == (valueInt > targetInt) case "lt": return !c.Not == (valueInt < targetInt) case "gte": log.Println(c.Not, valueInt, targetInt) return !c.Not == (valueInt >= targetInt) case "lte": return !c.Not == (valueInt <= targetInt) case "exists": return !c.Not == (value != "") case "contains": return !c.Not == strings.Contains(value, c.Value) case "numerical": return !c.Not == (valueIntErr == nil) default: return c.Not } }
|