1pub mod csv;
9pub mod json;
10pub mod report;
11pub mod schema;
12
13pub use report::{ValidationIssue, ValidationResult};
14pub use schema::Schema;
15use std::io::Read;
16
17pub fn version() -> &'static str {
19 env!("CARGO_PKG_VERSION")
20}
21
22#[derive(Debug, Clone)]
24pub struct ValidationOptions {
25 pub max_errors: usize,
27 pub schema: Option<Schema>,
29 pub auto_fix: bool,
31 pub csv_delimiter: u8,
33}
34
35impl Default for ValidationOptions {
36 fn default() -> Self {
37 Self {
38 max_errors: 0,
39 schema: None,
40 auto_fix: false,
41 csv_delimiter: b',',
42 }
43 }
44}
45
46pub trait Validator {
48 fn validate(&self, options: &ValidationOptions) -> ValidationResult;
50}
51
52pub fn validate_json_stream<R: Read>(reader: R, options: &ValidationOptions) -> ValidationResult {
58 json::validate_json_stream(reader, options)
59}
60
61pub fn validate_csv_stream<R: Read>(reader: R, options: &ValidationOptions) -> ValidationResult {
67 csv::validate_csv_stream(reader, options)
68}
69
70#[cfg(test)]
71mod tests {
72 use super::*;
73
74 #[test]
75 fn test_version() {
76 assert!(!version().is_empty());
77 }
78
79 #[test]
80 fn test_validation_options_default() {
81 let options = ValidationOptions::default();
82 assert_eq!(options.max_errors, 0);
83 assert!(!options.auto_fix);
84 }
85}