use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Report {
pub title: String,
pub generated_at: String,
pub program: String,
pub invariants_checked: usize,
pub violations_found: usize,
pub coverage_percent: u8,
pub protected_functions: Vec<String>,
pub unprotected_functions: Vec<String>,
pub severity_breakdown: SeverityBreakdown,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SeverityBreakdown {
pub critical: usize,
pub high: usize,
pub medium: usize,
pub low: usize,
}
impl Report {
pub fn new(title: String, program: String) -> Self {
Self {
title,
generated_at: chrono::Utc::now().to_rfc3339(),
program,
invariants_checked: 0,
violations_found: 0,
coverage_percent: 0,
protected_functions: Vec::new(),
unprotected_functions: Vec::new(),
severity_breakdown: SeverityBreakdown::default(),
}
}
}