dredd-rs 0.2.1

A simple rules engine for Rust, adapted from the Dredd implementation for Android.
Documentation
use crate::rule::{Rule, RuleContext, RuleResult};

use super::RuleRunner;

/// BestFirstRuleRunner executes the first rule that evaluates to true
pub struct BestFirstRuleRunner;

impl RuleRunner for BestFirstRuleRunner {
    fn run(&self, context: &mut RuleContext, rules: &mut [Box<dyn Rule>]) -> RuleResult<()> {
        // Execute the first rule that evaluates to true
        for rule in rules {
            if rule.evaluate(context)? {
                rule.fire(context)?;
                break; // Only execute the first matching rule
            }
        }
        Ok(())
    }
}