term_guard/core/
mod.rs

1//! Core validation types for the Term data quality library.
2//!
3//! This module provides the fundamental types for defining and executing
4//! data validation suites, including checks, constraints, and results.
5//!
6//! ## Overview
7//!
8//! The core module contains the essential building blocks for data validation:
9//!
10//! - **[`ValidationSuite`]**: A collection of checks to run against your data
11//! - **[`Check`]**: A named group of related constraints with a severity level
12//! - **[`Constraint`]**: Individual validation rules (implemented in the `constraints` module)
13//! - **[`Level`]**: Severity levels for checks (Error, Warning, Info)
14//! - **[`ValidationResult`]**: Results from running a validation suite
15//!
16//! ## Architecture
17//!
18//! ```text
19//! ValidationSuite
20//!     ├── Check (Level: Error)
21//!     │   ├── Constraint 1
22//!     │   └── Constraint 2
23//!     └── Check (Level: Warning)
24//!         ├── Constraint 3
25//!         └── Constraint 4
26//! ```
27//!
28//! ## Example
29//!
30//! ```rust
31//! use term_guard::core::{ValidationSuite, Check, Level, ValidationResult};
32//! use term_guard::core::builder_extensions::{CompletenessOptions, StatisticalOptions};
33//! use term_guard::constraints::{Assertion, FormatType, FormatOptions};
34//! use datafusion::prelude::*;
35//!
36//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
37//! // Build a validation suite using the unified API
38//! let suite = ValidationSuite::builder("customer_validation")
39//!     .description("Validate customer data quality")
40//!     .check(
41//!         Check::builder("critical_fields")
42//!             .level(Level::Error)
43//!             .description("Critical fields must be valid")
44//!             // Unified API for completeness
45//!             .completeness("customer_id", CompletenessOptions::full().into_constraint_options())
46//!             .completeness("email", CompletenessOptions::threshold(0.99).into_constraint_options())
47//!             // Convenience method for primary key validation
48//!             .primary_key(vec!["customer_id"])
49//!             .build()
50//!     )
51//!     .check(
52//!         Check::builder("data_quality")
53//!             .level(Level::Warning)
54//!             // Format validation API
55//!             .has_format("email", FormatType::Email, 0.95, FormatOptions::default())
56//!             // Combined statistics in one query
57//!             .statistics(
58//!                 "age",
59//!                 StatisticalOptions::new()
60//!                     .min(Assertion::GreaterThanOrEqual(18.0))
61//!                     .max(Assertion::LessThan(120.0))
62//!             )?
63//!             .build()
64//!     )
65//!     .build();
66//!
67//! // Create context and register data
68//! let ctx = SessionContext::new();
69//! // ... register your customer table ...
70//!
71//! // Run validation
72//! let results = suite.run(&ctx).await?;
73//!
74//! // Process results
75//! match results {
76//!     ValidationResult::Success { report, .. } => {
77//!         println!("All validations passed!");
78//!         for issue in &report.issues {
79//!             if issue.level == Level::Warning {
80//!                 println!("Warning: {}", issue.message);
81//!             }
82//!         }
83//!     }
84//!     ValidationResult::Failure { report } => {
85//!         println!("Validation failures:");
86//!         for issue in &report.issues {
87//!             if issue.level == Level::Error {
88//!                 println!("Error in '{}': {}", issue.check_name, issue.message);
89//!             }
90//!         }
91//!     }
92//! }
93//! # Ok(())
94//! # }
95//! ```
96//!
97//! ## Constraint Status
98//!
99//! Each constraint evaluation returns a status:
100//!
101//! - **Success**: The constraint passed
102//! - **Failure**: The constraint failed
103//! - **Skipped**: The constraint was skipped (e.g., no data)
104//!
105//! ## Performance Considerations
106//!
107//! - Constraints within a check may be optimized to run in a single query
108//! - Use the `with_optimizer(true)` option on ValidationSuite for best performance
109//! - Group related constraints in the same Check when possible
110
111mod check;
112mod constraint;
113mod context;
114mod debug_context;
115mod fluent_builder;
116mod level;
117mod logical;
118mod multi_source;
119mod result;
120mod suite;
121mod unified;
122pub mod validation_context;
123
124pub mod builder_extensions;
125
126pub use check::{Check, CheckBuilder};
127pub use constraint::{Constraint, ConstraintMetadata, ConstraintResult, ConstraintStatus};
128pub use context::{TermContext, TermContextConfig};
129pub use debug_context::{
130    DebugContext, DebugInfo, DebugLevel, DebugSummary, ErrorReport, ValidationResultDebugExt,
131};
132pub use fluent_builder::{CheckMultiTableExt, MultiTableCheck};
133pub use level::Level;
134pub use logical::{ColumnSpec, ConstraintOptionsBuilder, LogicalOperator, LogicalResult};
135pub use multi_source::{CacheStats, MultiSourceValidator};
136pub use result::{ValidationIssue, ValidationMetrics, ValidationReport, ValidationResult};
137pub use suite::{ValidationSuite, ValidationSuiteBuilder};
138pub use unified::{ConstraintOptions, UnifiedCompletenessBase, UnifiedConstraint};
139pub use validation_context::{current_validation_context, ValidationContext, CURRENT_CONTEXT};