invr 0.2.1

Declarative data validation engine using invariants executed on Polars DataFrames.
use crate::infrastructure::polars::kind::PolarsKind;
use crate::invariant::Invariant;
use crate::violation::Violation;
use crate::violation::value_object::metric_value::MetricValue;

pub fn metric_violation(
    inv: &Invariant<PolarsKind>,
    metric_name: &str,
    value: i64,
    message: String,
) -> Option<Violation> {
    if value == 0 {
        return None;
    }

    Some(
        Violation::new(
            inv.id().clone(),
            inv.severity(),
            inv.scope().clone(),
            message,
        )
        .with_metric(metric_name, MetricValue::Int(value)),
    )
}