capability_skeleton/
skeleton_node_set_child_ids.rs

1// ---------------- [ File: capability-skeleton/src/skeleton_node_set_child_ids.rs ]
2crate::ix!();
3
4impl SkeletonNode {
5
6    /// Mutate `child_ids`, turning this node into `Dispatch` if needed.
7    /// If `new_child_ids` is empty, we switch to `LeafHolder` with leaf_count=0.
8    pub fn set_child_ids(&mut self, new_child_ids: Vec<u16>) {
9        if new_child_ids.is_empty() {
10            // become a LeafHolder if no children
11            match self {
12                SkeletonNode::LeafHolder { .. } => {
13                    // already a LeafHolder, do nothing or set leaf_count=0
14                }
15                SkeletonNode::Dispatch { 
16                    id, parent_id, name, original_key, ordering, ..
17                } => {
18                    *self = SkeletonNode::LeafHolder {
19                        id: *id,
20                        parent_id: *parent_id,
21                        leaf_count: 0,
22                        capstone: false,
23                        name: name.clone(),
24                        original_key: original_key.clone(),
25                        ordering: ordering.clone(),
26                    };
27                }
28                SkeletonNode::Aggregate { 
29                    id, parent_id, name, original_key, ordering, ..
30                } => {
31                    *self = SkeletonNode::LeafHolder {
32                        id: *id,
33                        parent_id: *parent_id,
34                        leaf_count: 0,
35                        capstone: false,
36                        name: name.clone(),
37                        original_key: original_key.clone(),
38                        ordering: ordering.clone(),
39                    };
40                }
41            }
42        } else {
43            // become Dispatch if we have new children
44            match self {
45                SkeletonNode::Dispatch { child_ids, .. } => {
46                    *child_ids = new_child_ids;
47                }
48                SkeletonNode::Aggregate { 
49                    id, parent_id, name, original_key, ordering, ..
50                } => {
51                    *self = SkeletonNode::Dispatch {
52                        id: *id,
53                        parent_id: *parent_id,
54                        child_ids: new_child_ids,
55                        name: name.clone(),
56                        original_key: original_key.clone(),
57                        ordering: ordering.clone(),
58                    };
59                }
60                SkeletonNode::LeafHolder {
61                    id, parent_id, name, original_key, ordering, ..
62                } => {
63                    *self = SkeletonNode::Dispatch {
64                        id: *id,
65                        parent_id: *parent_id,
66                        child_ids: new_child_ids,
67                        name: name.clone(),
68                        original_key: original_key.clone(),
69                        ordering: ordering.clone(),
70                    };
71                }
72            }
73        }
74    }
75}