use serde::{Deserialize, Serialize};
use super::{AuditStatus, DependencyAudit};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct AuditSummary {
pub total_dependencies: u32,
pub clean_count: u32,
pub warning_count: u32,
pub vulnerable_count: u32,
pub audits: Vec<DependencyAudit>,
}
impl AuditSummary {
pub fn from_audits(audits: Vec<DependencyAudit>) -> Self {
let total_dependencies = audits.len() as u32;
let clean_count =
audits.iter().filter(|a| a.audit_status == AuditStatus::Clean).count() as u32;
let warning_count =
audits.iter().filter(|a| a.audit_status == AuditStatus::Warning).count() as u32;
let vulnerable_count =
audits.iter().filter(|a| a.audit_status == AuditStatus::Vulnerable).count() as u32;
Self { total_dependencies, clean_count, warning_count, vulnerable_count, audits }
}
pub fn has_vulnerabilities(&self) -> bool {
self.vulnerable_count > 0
}
pub fn has_issues(&self) -> bool {
self.warning_count > 0 || self.vulnerable_count > 0
}
pub fn vulnerable_deps(&self) -> Vec<&DependencyAudit> {
self.audits.iter().filter(|a| a.is_vulnerable()).collect()
}
}