Skip to main content

changeset_operations/verification/
engine.rs

1use super::rules::VerificationRule;
2use super::{VerificationContext, VerificationResult};
3use crate::Result;
4
5pub struct VerificationEngine<'a> {
6    rules: Vec<&'a dyn VerificationRule>,
7}
8
9impl<'a> VerificationEngine<'a> {
10    #[must_use]
11    pub fn new() -> Self {
12        Self { rules: Vec::new() }
13    }
14
15    pub fn add_rule(&mut self, rule: &'a dyn VerificationRule) {
16        self.rules.push(rule);
17    }
18
19    /// # Errors
20    ///
21    /// Returns an error if any verification rule fails.
22    pub fn verify(&self, context: &VerificationContext) -> Result<VerificationResult> {
23        let mut result = VerificationResult::new(
24            context.affected_packages().clone(),
25            context.transitive_dependents().clone(),
26            context.project_files().clone(),
27            context.ignored_files().clone(),
28        );
29
30        for rule in &self.rules {
31            rule.check(context, &mut result)?;
32        }
33
34        Ok(result)
35    }
36}
37
38impl Default for VerificationEngine<'_> {
39    fn default() -> Self {
40        Self::new()
41    }
42}