Expand description
Validation middleware for oxicode.
This module provides validation constraints for deserialization, ensuring data integrity and security during decoding.
§Features
- Size Limits: Limit string/collection lengths via
Constraints::max_len/Constraints::min_len - Range Constraints: Validate numeric values with
Constraints::range - Non-empty: Reject empty strings or collections via
Constraints::non_empty - ASCII enforcement: Require ASCII-only content with
Constraints::ascii_only - Custom Validators: User-defined logic via
Constraints::custom - Collect or fail-fast: Control error accumulation through
ValidationConfig - Default fallbacks: Recover gracefully with
Validator::validate_or_default
§Examples
§Basic field validation
use oxicode::validation::{Validator, Constraints};
// Build a validator for i32 values in [0, 120].
let validator: Validator<i32> = Validator::new()
.constraint("age", Constraints::range(Some(0i32), Some(120i32)));
assert!(validator.validate(&50).is_ok());
assert!(validator.validate(&-1).is_err());
assert!(validator.validate(&200).is_err());§String constraints
use oxicode::validation::{Validator, Constraints};
let mut validator: Validator<String> = Validator::new();
validator.add_constraint("username", Constraints::min_len(3));
validator.add_constraint("username", Constraints::max_len(32));
validator.add_constraint("username", Constraints::ascii_only());
assert!(validator.validate(&"alice".to_string()).is_ok());
assert!(validator.validate(&"".to_string()).is_err());
assert!(validator.validate(&"x".to_string()).is_err());§Returning a default on failure
use oxicode::validation::{Validator, Constraints};
let validator: Validator<i32> = Validator::new()
.constraint("score", Constraints::range(Some(0i32), Some(100i32)));
// Returns the value unchanged when valid.
assert_eq!(validator.validate_or_default(75, 0), 75);
// Returns the default when validation fails.
assert_eq!(validator.validate_or_default(-5, 0), 0);
// Lazy default via closure — only evaluated on failure.
assert_eq!(validator.validate_or_default_with(&200, || 100), 100);§Collecting all errors (non-fail-fast)
use oxicode::validation::{Validator, Constraints, ValidationConfig};
let config = ValidationConfig::new().with_fail_fast(false);
let mut validator: Validator<String> = Validator::with_config(config);
validator.add_constraint("field", Constraints::min_len(10));
validator.add_constraint("field", Constraints::max_len(5));
// "hi" is too short (min_len 10) AND below max_len 5 is satisfied, but
// actually "hi".len() < 10 fails the first, and "hi".len() <= 5 passes the second.
// Use a value that fails both: "hello world" is > 5 and < 10 is false (len 11 >= 10).
// Simplest: "ab" fails min_len(10).
let result = validator.validate(&"ab".to_string());
assert!(result.is_err());Re-exports§
pub use constraints::Constraint;pub use constraints::Constraints;pub use constraints::Range;pub use constraints::ValidationResult;
Modules§
- constraints
- Constraint definitions for field validation.
Structs§
- Collection
Validator - Validator for collections with size constraints.
- Field
Validation alloc - Field validation entry for the validator.
- Numeric
Validator - Validator for numeric values with range constraints.
- String
Validator alloc - Validator for string fields with common constraints.
- Validation
Config - Configuration for validation behavior.
- Validation
Error - Error type for validation failures.
- Validator
alloc - A validator that applies constraints to fields.