1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#[derive(Debug, PartialEq, Eq)]
pub(crate) struct Node<T> {
    pub(crate) value: T,

    pub(crate) parent: Option<usize>,
    pub(crate) prev_sibling: Option<usize>,
    pub(crate) next_sibling: Option<usize>,
    pub(crate) first_child: Option<usize>,
    pub(crate) last_child: Option<usize>,
}

impl<T> Node<T> {
    pub(crate) const fn new(value: T) -> Self {
        Self {
            value,
            parent: None,
            prev_sibling: None,
            next_sibling: None,
            first_child: None,
            last_child: None,
        }
    }
}

impl<T: Default> Default for Node<T> {
    fn default() -> Self {
        Self {
            value: Default::default(),
            parent: Option::default(),
            prev_sibling: Option::default(),
            next_sibling: Option::default(),
            first_child: Option::default(),
            last_child: Option::default(),
        }
    }
}