use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Decision {
Allow,
Block,
}
impl Decision {
#[must_use]
pub fn as_str(self) -> &'static str {
match self {
Decision::Allow => "allow",
Decision::Block => "block",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Severity {
Error,
Warning,
Info,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct Violation {
pub file: String,
pub line: u32,
pub rule: String,
pub contract: Option<String>,
pub fix_hint: String,
pub suggestions: Vec<String>,
pub severity: Severity,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct CheckResult {
pub decision: Decision,
pub violations: Vec<Violation>,
pub duration_ms: f64,
}