package kql
import (
"github.com/opencloud-eu/opencloud/pkg/ast"
)
func validateAst(a *ast.Ast) error {
return validateOperators(a.Nodes)
}
func validateGroupNode(n *ast.GroupNode) error {
if err := validateOperators(n.Nodes); err != nil {
return err
}
if n.Key != "" {
for _, node := range n.Nodes {
if ast.NodeKey(node) != "" {
return &NamedGroupInvalidNodesError{Node: node}
}
}
}
return nil
}
func validateOperators(nodes []ast.Node) error {
for i, node := range nodes {
op, ok := node.(*ast.OperatorNode)
if !ok {
continue
}
switch op.Value {
case BoolAND, BoolOR:
if i == 0 {
return &DanglingOperatorError{Node: op}
}
if _, prevIsOperator := nodes[i-1].(*ast.OperatorNode); prevIsOperator {
return &DanglingOperatorError{Node: op}
}
}
if i == len(nodes)-1 {
return &DanglingOperatorError{Node: op}
}
}
return nil
}