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