use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationResult {
pub valid: bool,
pub mode: String,
pub errors: Vec<ValidationError>,
pub stats: ValidationStats,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationError {
pub code: String,
pub path: String,
pub message: String,
pub severity: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub suggestion: Option<Suggestion>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Suggestion {
pub action: String,
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub suggested_value: Option<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationStats {
pub fields_checked: u64,
pub fields_valid: u64,
pub fields_invalid: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ValidationOptions {
#[serde(default = "default_mode")]
pub mode: String,
#[serde(default)]
pub paths: Vec<String>,
}
fn default_mode() -> String {
"full".to_string()
}