qlty_coverage/publish/
processor.rs

1use crate::publish::{Plan, Report, Results};
2use anyhow::Result;
3use qlty_types::tests::v1::FileCoverage;
4
5pub struct Processor {
6    plan: Plan,
7    results: Results,
8}
9
10impl Processor {
11    pub fn new(plan: &Plan, results: Results) -> Self {
12        Self {
13            plan: plan.clone(),
14            results,
15        }
16    }
17
18    pub fn compute(&self) -> Result<Report> {
19        let mut report_files = self.results.report_files.clone();
20
21        report_files.iter_mut().for_each(|f| {
22            f.build_id = self.plan.metadata.build_id.clone();
23            f.tag = self.plan.metadata.tag.clone();
24        });
25
26        Ok(Report {
27            metadata: self.plan.metadata.clone(),
28            report_files,
29            file_coverages: self
30                .results
31                .file_coverages
32                .iter()
33                .filter_map(|file_coverage| self.transform(file_coverage.to_owned()))
34                .collect::<Vec<_>>(),
35        })
36    }
37
38    fn transform(&self, file_coverage: FileCoverage) -> Option<FileCoverage> {
39        let mut file_coverage: Option<FileCoverage> = Some(file_coverage.clone());
40
41        for transformer in self.plan.transformers.iter() {
42            if file_coverage.is_some() {
43                file_coverage = transformer.transform(file_coverage.unwrap());
44            } else {
45                return None;
46            }
47        }
48
49        file_coverage
50    }
51}