use serde::Serialize;
#[derive(Serialize)]
pub struct ValidationResult {
pub document_status: DocumentStatus,
pub csaf_version: String,
pub summary: ValidationSummary,
pub results: Vec<TestRunResult>,
}
#[derive(Serialize, PartialEq)]
pub enum DocumentStatus {
Undetermined,
Valid,
Invalid,
}
#[derive(Serialize)]
pub struct ValidationSummary {
pub total: Statistic,
pub passed: usize,
pub failed: usize,
pub skipped: usize,
pub not_found: usize,
}
#[derive(Serialize)]
pub struct Statistic {
pub test_count: usize,
pub errors_count: usize,
pub warnings_count: usize,
pub info_count: usize,
}
#[derive(Serialize)]
pub struct TestRunResult {
pub test_id: String,
pub result: TestResult,
}
#[derive(Serialize, PartialEq)]
pub enum TestResult {
Passed(Passed),
Failed(Vec<TestFinding>),
Skipped(Skipped),
NotFound,
}
#[derive(Serialize, PartialEq)]
#[serde(tag = "severity")]
pub enum TestFinding {
Infomation(TestFindingData),
Warning(TestFindingData),
Error(TestFindingData),
}
#[derive(Serialize, PartialEq)]
#[serde(tag = "reason")]
pub enum Skipped {
DeserializationFailed { message: String },
PreconditionFailed { test_id: String, message: String },
}
#[derive(Serialize, PartialEq)]
#[serde(tag = "reason")]
pub enum Passed {
Success,
NoData { message: String },
NotApplicable { message: String },
}
#[derive(Serialize, PartialEq)]
pub struct TestFindingData {
pub message: String,
pub instance_path: String,
}