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};