Skip to main content

oratos_core/
audit.rs

1use serde::{Deserialize, Serialize};
2
3use crate::finding::Finding;
4use crate::page::PageRef;
5use crate::score::CategoryScores;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct AuditTarget {
9    pub path_or_url: String,
10    pub kind: TargetKind,
11}
12
13#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
14#[serde(rename_all = "snake_case")]
15pub enum TargetKind {
16    Directory,
17    Url,
18    File,
19    Missing,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct PageAudit {
24    pub page: PageRef,
25    pub findings: Vec<Finding>,
26    pub scores: CategoryScores,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct AuditReport {
31    pub core_version: String,
32    pub target: AuditTarget,
33    pub pages: Vec<PageAudit>,
34    pub findings: Vec<Finding>,
35    pub scores: CategoryScores,
36    pub page_count: usize,
37}
38
39impl AuditReport {
40    pub fn new(target: AuditTarget, pages: Vec<PageAudit>) -> Self {
41        let findings: Vec<Finding> = pages.iter().flat_map(|p| p.findings.clone()).collect();
42        let scores = CategoryScores::from_findings(&findings);
43        let page_count = pages.len();
44
45        Self {
46            core_version: env!("CARGO_PKG_VERSION").to_string(),
47            target,
48            pages,
49            findings,
50            scores,
51            page_count,
52        }
53    }
54}