capability_skeleton/
skeleton_node_getters.rs

1// ---------------- [ File: capability-skeleton/src/skeleton_node_getters.rs ]
2crate::ix!();
3
4impl SkeletonNode {
5
6    /// Getter for the `id` field, common across all variants.
7    pub fn id(&self) -> u16 {
8        match self {
9            SkeletonNode::Dispatch { id, .. }
10            | SkeletonNode::Aggregate { id, .. }
11            | SkeletonNode::LeafHolder { id, .. } => *id,
12        }
13    }
14
15    /// Getter for the optional `parent_id` field.
16    pub fn parent_id(&self) -> Option<u16> {
17        match self {
18            SkeletonNode::Dispatch { parent_id, .. }
19            | SkeletonNode::Aggregate { parent_id, .. }
20            | SkeletonNode::LeafHolder { parent_id, .. } => *parent_id,
21        }
22    }
23
24    /// Getter for the `name` field.
25    pub fn name(&self) -> &str {
26        match self {
27            SkeletonNode::Dispatch { name, .. }
28            | SkeletonNode::Aggregate { name, .. }
29            | SkeletonNode::LeafHolder { name, .. } => name.as_str(),
30        }
31    }
32
33    /// Getter for the `original_key` field.
34    pub fn original_key(&self) -> &str {
35        match self {
36            SkeletonNode::Dispatch { original_key, .. }
37            | SkeletonNode::Aggregate { original_key, .. }
38            | SkeletonNode::LeafHolder { original_key, .. } => original_key.as_str(),
39        }
40    }
41
42    /// Getter for the optional `ordering` field.
43    pub fn ordering(&self) -> Option<&SubBranchOrdering> {
44        match self {
45            SkeletonNode::Dispatch { ordering, .. }
46            | SkeletonNode::Aggregate { ordering, .. }
47            | SkeletonNode::LeafHolder { ordering, .. } => ordering.as_ref(),
48        }
49    }
50
51    /// Getter for `child_ids`. Returns empty slice if variant has no children.
52    pub fn child_ids(&self) -> &[u16] {
53        match self {
54            SkeletonNode::Dispatch { child_ids, .. }
55            | SkeletonNode::Aggregate { child_ids, .. } => child_ids.as_slice(),
56            SkeletonNode::LeafHolder { .. } => &[],
57        }
58    }
59
60    /// Getter for `leaf_count`. Returns 0 if not a LeafHolder.
61    pub fn leaf_count(&self) -> u16 {
62        match self {
63            SkeletonNode::LeafHolder { leaf_count, .. } => *leaf_count,
64            _ => 0,
65        }
66    }
67
68    /// Getter for `capstone`. Returns false if not a LeafHolder.
69    pub fn capstone(&self) -> bool {
70        match self {
71            SkeletonNode::LeafHolder { capstone, .. } => *capstone,
72            _ => false,
73        }
74    }
75}