configbuilder-pattern-validator 0.1.0

configbuilder-pattern: validator domain, trait contract + tech-agnostic reference implementation.
Documentation
//! Integration tests for `DefaultValidator` against a real `ValidatorOps` test
//! double, exercising `thiserror`-derived `ValidatorError` through the public API.

use configbuilder_pattern_validator::{DefaultValidator, Validator, ValidatorError, ValidatorOps};
use std::path::Path;

struct RejectAll;

impl ValidatorOps for RejectAll {
    fn check_path(&self, target: &Path) -> Result<(), ValidatorError> {
        Err(ValidatorError::Io(format!(
            "{}: rejected by policy",
            target.display()
        )))
    }
}

/// @covers: validate_path
#[test]
fn test_default_validator_dispatches_to_boxed_ops() {
    let validator = DefaultValidator {
        ops: Box::new(RejectAll),
    };
    let result = Validator::validate_path(&validator, Path::new("/tmp/example"));
    match result {
        Err(ValidatorError::Io(msg)) => assert!(msg.contains("rejected by policy")),
        other => panic!("expected ValidatorError::Io, got {other:?}"),
    }
}