in rule/rule.go [575:612]
func addInterFieldComparator(rule *ruleData, lhs, comparator, rhs string) error {
op, found := operatorsTable[comparator]
if !found {
return fmt.Errorf("invalid operator '%v'", comparator)
}
switch op {
case equalOperator, notEqualOperator:
default:
return fmt.Errorf("invalid operator '%v', only '=' or '!=' can be used", comparator)
}
leftField, found := fieldsTable[lhs]
if !found {
return fmt.Errorf("invalid field '%v' on left", lhs)
}
rightField, found := fieldsTable[rhs]
if !found {
return fmt.Errorf("invalid field '%v' on right", lhs)
}
table, found := comparisonsTable[leftField]
if !found {
return fmt.Errorf("field '%v' cannot be used in an interfield comparison", lhs)
}
comparison, found := table[rightField]
if !found {
return fmt.Errorf("field '%v' cannot be used in an interfield comparison", rhs)
}
rule.fields = append(rule.fields, fieldCompare)
rule.fieldFlags = append(rule.fieldFlags, op)
rule.values = append(rule.values, uint32(comparison))
return nil
}