invr 0.2.1

Declarative data validation engine using invariants executed on Polars DataFrames.
#[derive(Debug, Clone, PartialEq, Default, serde::Serialize)]
pub struct ReportMetric {
    pub total_invariants: usize,
    pub evaluated_invariants: usize,
    pub violations: usize,
    pub execution_time_ms: u128,
}

impl ReportMetric {
    pub fn new(
        total_invariants: usize,
        evaluated_invariants: usize,
        violations: usize,
        execution_time_ms: u128,
    ) -> Self {
        Self {
            total_invariants,
            evaluated_invariants,
            violations,
            execution_time_ms,
        }
    }

    pub fn violation_rate(&self) -> f64 {
        if self.evaluated_invariants == 0 {
            return 0.0;
        }

        self.violations as f64 / self.evaluated_invariants as f64
    }

    pub fn success_rate(&self) -> f64 {
        1.0 - self.violation_rate()
    }

    pub fn has_violations(&self) -> bool {
        self.violations > 0
    }
}