aaai_core/audit/
result.rs1use crate::diff::entry::DiffEntry;
4use crate::config::definition::AuditEntry;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum AuditStatus {
8 Ok,
9 Pending,
10 Failed,
11 Ignored,
12 Error,
13}
14
15impl std::fmt::Display for AuditStatus {
16 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
17 let s = match self {
18 AuditStatus::Ok => "OK",
19 AuditStatus::Pending => "Pending",
20 AuditStatus::Failed => "Failed",
21 AuditStatus::Ignored => "Ignored",
22 AuditStatus::Error => "Error",
23 };
24 write!(f, "{s}")
25 }
26}
27
28#[derive(Debug, Clone)]
29pub struct FileAuditResult {
30 pub diff: DiffEntry,
31 pub entry: Option<AuditEntry>,
32 pub status: AuditStatus,
33 pub detail: Option<String>,
34}
35
36#[derive(Debug, Clone, Default)]
37pub struct AuditSummary {
38 pub total: usize,
39 pub ok: usize,
40 pub pending: usize,
41 pub failed: usize,
42 pub ignored: usize,
43 pub error: usize,
44}
45
46impl AuditSummary {
47 pub fn from_results(results: &[FileAuditResult]) -> Self {
48 let mut s = AuditSummary::default();
49 s.total = results.len();
50 for r in results {
51 match r.status {
52 AuditStatus::Ok => s.ok += 1,
53 AuditStatus::Pending => s.pending += 1,
54 AuditStatus::Failed => s.failed += 1,
55 AuditStatus::Ignored => s.ignored += 1,
56 AuditStatus::Error => s.error += 1,
57 }
58 }
59 s
60 }
61
62 pub fn is_passing(&self) -> bool {
63 self.failed == 0 && self.pending == 0 && self.error == 0
64 }
65}
66
67#[derive(Debug, Clone)]
68pub struct AuditResult {
69 pub results: Vec<FileAuditResult>,
70 pub summary: AuditSummary,
71}
72
73impl AuditResult {
74 pub fn new(results: Vec<FileAuditResult>) -> Self {
75 let summary = AuditSummary::from_results(&results);
76 AuditResult { results, summary }
77 }
78}