qlty_coverage/publish/
report.rs

1use std::path::PathBuf;
2
3use anyhow::Result;
4use qlty_cloud::export::CoverageExport;
5use qlty_types::tests::v1::{CoverageMetadata, FileCoverage, ReportFile};
6use serde::Serialize;
7
8#[derive(Debug, Clone, Default, Serialize)]
9pub struct Report {
10    pub metadata: CoverageMetadata,
11    pub report_files: Vec<ReportFile>,
12    pub file_coverages: Vec<FileCoverage>,
13}
14
15impl Report {
16    pub fn set_upload_id(&mut self, upload_id: &str) {
17        self.metadata.upload_id = upload_id.to_string();
18    }
19
20    pub fn set_project_id(&mut self, project_id: &str) {
21        self.metadata.project_id = Some(project_id.to_string());
22
23        self.report_files.iter_mut().for_each(|f| {
24            f.project_id = Some(project_id.to_string());
25        });
26
27        self.file_coverages.iter_mut().for_each(|f| {
28            f.project_id = Some(project_id.to_string());
29        });
30    }
31
32    pub fn export_to(&self, directory: Option<PathBuf>) -> Result<CoverageExport> {
33        let mut exporter = CoverageExport {
34            metadata: self.metadata.clone(),
35            report_files: self.report_files.clone(),
36            file_coverages: self.file_coverages.clone(),
37            ..Default::default()
38        };
39
40        exporter.export_to(directory)?;
41        Ok(exporter)
42    }
43}