use serde::{Deserialize, Serialize};
#[derive(Serialize)]
pub struct AuditLogEntry<'a> {
pub timestamp: String, pub level: &'a str, pub event: &'a str, #[serde(skip_serializing_if = "Option::is_none")]
pub contract: Option<Contract<'a>>, #[serde(skip_serializing_if = "Option::is_none")]
pub target: Option<Target<'a>>, #[serde(skip_serializing_if = "Option::is_none")]
pub results: Option<Vec<RuleResult>>, pub executor: Executor, #[serde(skip_serializing_if = "Option::is_none")]
pub details: Option<&'a str>, #[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<ProcessSummary>, }
#[derive(Serialize)]
pub struct Contract<'a> {
pub name: &'a str,
pub version: &'a str,
}
#[derive(Serialize)]
pub struct Target<'a> {
pub file: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub column: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rule: Option<&'a str>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct RuleResult {
pub column: String, pub rule: String, pub result: String, pub details: Option<String>, }
#[derive(Clone, Serialize)]
pub struct Executor {
pub user: String, pub host: String, }
#[derive(Serialize)]
pub struct ProcessSummary {
pub contracts_run: usize,
pub contracts_failed: usize,
pub status: String, }