capability-skeleton 0.1.0

A Rust library for managing and building complex hierarchical tree structures such as skill trees. Supports serialization, error handling, and deep tree metrics.
Documentation
// ---------------- [ File: capability-skeleton/src/tree_sub_branch_ordering_measurer.rs ]
crate::ix!();

impl TreeSubBranchOrderingMeasurer for Skeleton {
    #[instrument(level = "trace", skip(self))]
    fn measure_tree_sub_branch_orderings(&self) -> Vec<SubBranchOrdering> {
        let mut results = Vec::with_capacity(self.nodes().len());
        for node in self.nodes() {
            let ord = node.ordering().cloned().unwrap_or(SubBranchOrdering::None);
            results.push(ord);
        }
        results
    }
}

#[cfg(test)]
mod skeleton_sub_branch_ordering_measurer_assessment {
    use super::*;

    #[traced_test]
    fn check_ordering_is_unknown_for_all_nodes() {
        let n0 = SkeletonNodeBuilder::default()
            .id(0u16)
            .child_ids(vec![1u16])
            .name("root")
            .original_key("root")
            .build(NodeKind::Dispatch)
            .unwrap();
        let n1 = SkeletonNodeBuilder::default()
            .id(1u16)
            .name("child")
            .original_key("child")
            .build(NodeKind::LeafHolder)
            .unwrap();

        let skel = SkeletonBuilder::default()
            .nodes(vec![n0, n1])
            .root_id(Some(0u16))
            .build()
            .unwrap();

        let orderings = skel.measure_tree_sub_branch_orderings();
        assert_eq!(orderings.len(), 2);
        for o in orderings {
            match o {
                SubBranchOrdering::None => {},
                _ => panic!("Expected None ordering for Skeleton node"),
            }
        }
    }
}