Skip to main content

changeset_operations/verification/rules/
coverage.rs

1use super::{VerificationContext, VerificationResult, VerificationRule};
2use crate::Result;
3use crate::traits::ChangesetReader;
4
5pub struct CoverageRule<'a, R: ChangesetReader> {
6    reader: &'a R,
7}
8
9impl<'a, R: ChangesetReader> CoverageRule<'a, R> {
10    pub fn new(reader: &'a R) -> Self {
11        Self { reader }
12    }
13}
14
15impl<R: ChangesetReader> VerificationRule for CoverageRule<'_, R> {
16    fn check(&self, context: &VerificationContext, result: &mut VerificationResult) -> Result<()> {
17        for path in &context.changeset_files {
18            let changeset = self.reader.read_changeset(path)?;
19            for release in changeset.releases {
20                result.covered_packages.insert(release.name);
21            }
22        }
23
24        result.uncovered_packages = context
25            .affected_packages
26            .iter()
27            .filter(|pkg| !result.covered_packages.contains(&pkg.name))
28            .cloned()
29            .collect();
30
31        Ok(())
32    }
33}