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