use serde::{Deserialize, Serialize};
use std::collections::{HashMap, HashSet};
pub type TestCoverageResult = (String, HashMap<String, HashSet<u64>>);
#[derive(Debug, Deserialize, Serialize)]
pub struct TarpaulinReport {
pub files: Vec<SourceFile>,
pub coverage: f64,
pub covered: usize,
pub coverable: usize,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct SourceFile {
pub path: Vec<String>,
pub content: String,
pub traces: Vec<Trace>,
pub covered: usize,
pub coverable: usize,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Trace {
pub line: u64,
pub stats: LineStat,
pub address: HashSet<u64>,
pub length: u64,
}
#[derive(Debug, Deserialize, Serialize)]
pub enum LineStat {
Line(u64),
}
#[derive(Debug, Serialize)]
pub struct TestCoverageAnalysis {
pub total_covered_lines: u32,
pub unique_covered_lines: u32,
pub files: HashMap<String, FileCoverageAnalysis>,
}
#[derive(Debug, Serialize)]
pub struct FileCoverageAnalysis {
pub total_covered_lines: u32,
pub unique_covered_lines: u32,
pub unique_lines: Vec<u64>,
}
#[derive(Debug, Serialize)]
pub struct IsotarpAnalysis {
pub package: String,
pub tests: HashMap<String, TestCoverageAnalysis>,
}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, clap::ValueEnum)]
pub enum TargetMode {
#[default]
Per,
One,
}
impl std::fmt::Display for TargetMode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
TargetMode::Per => write!(f, "per"),
TargetMode::One => write!(f, "one"),
}
}
}