private static IResult EvaluateRule(IRecord record, IRule rule) { IResult aggregateResult = new Result(ResultType.Passed); var ruleResult = rule.Execute(); if (ruleResult.Type == ResultType.Failed && rule.Mode == EvaluationMode.Passive) { return aggregateResult; } aggregateResult = Result.Aggregate(ruleResult, aggregateResult, LogicType.And); record.Annotate(ruleResult.Dispositions); if (aggregateResult.Type == ResultType.Passed && rule.Children.Any()) { aggregateResult = EvaluateChildren(rule); if (aggregateResult.Type != ResultType.Passed) record.Annotate(aggregateResult.Dispositions); } return aggregateResult; }