changeset_operations/verification/
engine.rs1use 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 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}