use crate::tree::{Children, NodeId, Tree};
#[derive(Clone, Debug)]
pub struct NodeRef<'a, T: Clone> {
tree: &'a Tree<T>,
index: NodeId,
}
impl<'a, T: Clone> Copy for NodeRef<'a, T> {}
impl<'a, T: Clone> NodeRef<'a, T> {
#[must_use]
pub(crate) fn new(tree: &'a Tree<T>, index: NodeId) -> Self {
Self { tree, index }
}
#[must_use]
pub fn data(&self) -> &'a T {
&self.tree.arena[self.index.0].data
}
#[must_use]
pub fn id(&self) -> NodeId {
self.index
}
pub fn children(&self) -> Children<'a, T> {
let first_child = self.tree.arena[self.index.0].first_child;
Children::new(self.tree, first_child)
}
}