qlty_coverage/publish/
processor.rs1use 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}