Skip to main content

Module validation

Module validation 

Source
Expand description

Validation middleware for oxicode.

This module provides validation constraints for deserialization, ensuring data integrity and security during decoding.

§Features

§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§

CollectionValidator
Validator for collections with size constraints.
FieldValidationalloc
Field validation entry for the validator.
NumericValidator
Validator for numeric values with range constraints.
StringValidatoralloc
Validator for string fields with common constraints.
ValidationConfig
Configuration for validation behavior.
ValidationError
Error type for validation failures.
Validatoralloc
A validator that applies constraints to fields.