#[must_use]
pub fn rate(covered: u64, total: u64) -> f64 {
if total == 0 {
0.0
} else {
covered as f64 / total as f64
}
}
#[derive(Debug, Clone)]
pub struct LineCoverage {
pub line_number: u32,
pub hit_count: u64,
}
#[derive(Debug, Clone)]
pub struct BranchCoverage {
pub line_number: u32,
pub branch_index: u32,
pub hit_count: u64,
}
#[derive(Debug, Clone)]
pub struct FunctionCoverage {
pub name: String,
pub start_line: Option<u32>,
pub end_line: Option<u32>,
pub hit_count: u64,
}
#[derive(Debug, Clone, Default)]
pub struct FileCoverage {
pub path: String,
pub lines: Vec<LineCoverage>,
pub branches: Vec<BranchCoverage>,
pub functions: Vec<FunctionCoverage>,
}
impl FileCoverage {
pub fn new(path: String) -> Self {
Self {
path,
..Default::default()
}
}
}
#[derive(Debug, Clone, Default)]
pub struct CoverageData {
pub files: Vec<FileCoverage>,
}
impl CoverageData {
pub fn new() -> Self {
Self::default()
}
}
#[derive(Debug)]
pub struct ReportSummary {
pub total_files: u64,
pub total_lines: u64,
pub covered_lines: u64,
pub total_branches: u64,
pub covered_branches: u64,
pub total_functions: u64,
pub covered_functions: u64,
}
impl ReportSummary {
#[must_use]
pub fn line_rate(&self) -> f64 {
rate(self.covered_lines, self.total_lines)
}
#[must_use]
pub fn branch_rate(&self) -> f64 {
rate(self.covered_branches, self.total_branches)
}
#[must_use]
pub fn function_rate(&self) -> f64 {
rate(self.covered_functions, self.total_functions)
}
}
#[derive(Debug)]
pub struct FileSummary {
pub path: String,
pub total_lines: u64,
pub covered_lines: u64,
pub total_branches: u64,
pub covered_branches: u64,
}
impl FileSummary {
#[must_use]
pub fn line_rate(&self) -> f64 {
rate(self.covered_lines, self.total_lines)
}
}
#[derive(Debug)]
pub struct LineDetail {
pub line_number: u32,
pub hit_count: u64,
}
#[derive(Debug)]
pub struct ReportInfo {
pub name: String,
pub format: String,
pub created_at: String,
}
#[derive(Debug)]
pub struct FileDiffCoverage {
pub path: String,
pub covered_lines: Vec<u32>,
pub missed_lines: Vec<u32>,
}
impl FileDiffCoverage {
#[must_use]
pub fn total(&self) -> usize {
self.covered_lines.len() + self.missed_lines.len()
}
#[must_use]
pub fn rate(&self) -> f64 {
rate(self.covered_lines.len() as u64, self.total() as u64)
}
}