Skip to main content

changeset_operations/verification/
engine.rs

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