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/skeleton_node_getters.rs ]
crate::ix!();

impl SkeletonNode {

    /// Getter for the `id` field, common across all variants.
    pub fn id(&self) -> u16 {
        match self {
            SkeletonNode::Dispatch { id, .. }
            | SkeletonNode::Aggregate { id, .. }
            | SkeletonNode::LeafHolder { id, .. } => *id,
        }
    }

    /// Getter for the optional `parent_id` field.
    pub fn parent_id(&self) -> Option<u16> {
        match self {
            SkeletonNode::Dispatch { parent_id, .. }
            | SkeletonNode::Aggregate { parent_id, .. }
            | SkeletonNode::LeafHolder { parent_id, .. } => *parent_id,
        }
    }

    /// Getter for the `name` field.
    pub fn name(&self) -> &str {
        match self {
            SkeletonNode::Dispatch { name, .. }
            | SkeletonNode::Aggregate { name, .. }
            | SkeletonNode::LeafHolder { name, .. } => name.as_str(),
        }
    }

    /// Getter for the `original_key` field.
    pub fn original_key(&self) -> &str {
        match self {
            SkeletonNode::Dispatch { original_key, .. }
            | SkeletonNode::Aggregate { original_key, .. }
            | SkeletonNode::LeafHolder { original_key, .. } => original_key.as_str(),
        }
    }

    /// Getter for the optional `ordering` field.
    pub fn ordering(&self) -> Option<&SubBranchOrdering> {
        match self {
            SkeletonNode::Dispatch { ordering, .. }
            | SkeletonNode::Aggregate { ordering, .. }
            | SkeletonNode::LeafHolder { ordering, .. } => ordering.as_ref(),
        }
    }

    /// Getter for `child_ids`. Returns empty slice if variant has no children.
    pub fn child_ids(&self) -> &[u16] {
        match self {
            SkeletonNode::Dispatch { child_ids, .. }
            | SkeletonNode::Aggregate { child_ids, .. } => child_ids.as_slice(),
            SkeletonNode::LeafHolder { .. } => &[],
        }
    }

    /// Getter for `leaf_count`. Returns 0 if not a LeafHolder.
    pub fn leaf_count(&self) -> u16 {
        match self {
            SkeletonNode::LeafHolder { leaf_count, .. } => *leaf_count,
            _ => 0,
        }
    }

    /// Getter for `capstone`. Returns false if not a LeafHolder.
    pub fn capstone(&self) -> bool {
        match self {
            SkeletonNode::LeafHolder { capstone, .. } => *capstone,
            _ => false,
        }
    }
}