in guard/src/rules/evaluate.rs [681:720]
fn evaluate<'s>(&self,
context: &'s PathAwareValue,
var_resolver: &'s dyn EvaluationContext) -> Result<Status> {
Ok('outer: loop {
let mut num_passes = 0;
let mut num_fails = 0;
let item_name = std::any::type_name::<T>();
'conjunction:
for conjunction in self {
let mut num_of_disjunction_fails = 0;
let mut report = if "cfn_guard::rules::exprs::GuardClause" == item_name {
Some(AutoReport::new(
EvaluationType::Conjunction,
var_resolver,
item_name
))
} else { None };
for disjunction in conjunction {
match disjunction.evaluate(context, var_resolver)? {
Status::PASS => {
let _ = report.as_mut().map(|r| Some(r.status(Status::PASS).get_status()));
num_passes += 1;
continue 'conjunction; },
Status::SKIP => {},
Status::FAIL => { num_of_disjunction_fails += 1; }
}
}
if num_of_disjunction_fails > 0 {
let _ = report.as_mut().map(|r| Some(r.status(Status::FAIL).get_status()));
num_fails += 1;
continue;
//break 'outer Status::FAIL
}
}
if num_fails > 0 { break Status::FAIL }
if num_passes > 0 { break Status::PASS }
break Status::SKIP
})
}