data-protocol-validator 0.1.0

Rust validator for Data Protocol schemas - validates versioned bioinformatics analysis output against JSON Schema-based protocol definitions
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value;

/// The result of running validation.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationResult {
    pub valid: bool,
    pub mode: String,
    pub errors: Vec<ValidationError>,
    pub stats: ValidationStats,
}

/// A single validation error or warning.
#[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>,
}

/// A suggested fix for a validation error.
#[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>,
}

/// Aggregate statistics about validation.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationStats {
    pub fields_checked: u64,
    pub fields_valid: u64,
    pub fields_invalid: u64,
}

/// Options controlling the validation run.
#[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()
}