icydb_model/validate.rs
1//! Module: validate
2//!
3//! Responsibility: top-level validation entrypoint over visitable trees.
4//! Does not own: visitor diagnostics or per-type validation implementations.
5//! Boundary: convenient crate-level validation surface that delegates to visitor traversal.
6
7use crate::visitor::{
8 ApplicationOperation, PathSegment, Visitable, VisitorAdapter, VisitorError, perform_visit,
9 validate::ValidateVisitor,
10};
11
12///
13/// validate
14///
15/// Validate a visitable tree, collecting issues by path.
16///
17/// Validation is non-failing at the traversal level. All validation
18/// issues are collected and returned to the caller, which may choose
19/// how to interpret them.
20///
21/// # Errors
22///
23/// Returns `VisitorError` when one or more validators report an issue.
24///
25pub fn validate(node: &dyn Visitable) -> Result<(), VisitorError> {
26 let visitor = ValidateVisitor::new();
27 let mut adapter = VisitorAdapter::new(visitor);
28
29 perform_visit(&mut adapter, node, PathSegment::Empty);
30
31 adapter
32 .result()
33 .map_err(|issues| VisitorError::new(ApplicationOperation::Validate, issues))
34}