Skip to main content

icydb_schema/validate/
mod.rs

1//! Schema validation orchestration and shared helpers.
2
3pub mod naming;
4pub mod relation;
5
6use crate::{
7    error::ErrorTree,
8    node::{Schema, VisitableNode},
9    visit::ValidateVisitor,
10};
11
12/// Run full schema validation in a staged, deterministic order.
13pub(crate) fn validate_schema(schema: &Schema) -> Result<(), ErrorTree> {
14    // Phase 1: validate each node (structural + local invariants).
15    let mut errors = validate_nodes(schema);
16
17    // Phase 2: enforce schema-wide invariants.
18    validate_global(schema, &mut errors);
19
20    errors.result()
21}
22
23// Validate all nodes via a visitor to retain route-aware error aggregation.
24fn validate_nodes(schema: &Schema) -> ErrorTree {
25    let mut visitor = ValidateVisitor::new();
26    schema.accept(&mut visitor);
27
28    visitor.errors
29}
30
31// Run global validation passes that require a full schema view.
32fn validate_global(schema: &Schema, errors: &mut ErrorTree) {
33    naming::validate_entity_naming(schema, errors);
34    relation::validate_same_canister_relations(schema, errors);
35}