fn evaluate()

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
        })
    }