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.insert_covered_package(release.name().clone());
21            }
22        }
23
24        let uncovered = context
25            .affected_packages()
26            .iter()
27            .filter(|pkg| !result.covered_packages().contains(pkg.name()))
28            .cloned()
29            .collect();
30        result.set_uncovered_packages(uncovered);
31
32        Ok(())
33    }
34}