layer_rs/
get.rs

1use super::*;
2
3/// Getter trait for type level binary tree node.
4/// This requires that the target requirement exists in the tree.
5pub trait Get<Target, Path> {
6    fn get(&self) -> &Target;
7    fn get_mut(&mut self) -> &mut Target;
8}
9
10// get: base case
11impl<Target, SubtreeL, SubtreeR> Get<Target, Here> for Node<Target, SubtreeL, SubtreeR> {
12    fn get(&self) -> &Target {
13        &self.requirement
14    }
15
16    fn get_mut(&mut self) -> &mut Target {
17        &mut self.requirement
18    }
19}
20
21// get: left subtree case
22impl<Target, Req, SubtreeL, SubtreeR, SubtreePath> Get<Target, Left<SubtreePath>>
23    for Node<Req, SubtreeL, SubtreeR>
24where
25    SubtreeL: Get<Target, SubtreePath>,
26{
27    fn get(&self) -> &Target {
28        self.prev_left.get()
29    }
30
31    fn get_mut(&mut self) -> &mut Target {
32        self.prev_left.get_mut()
33    }
34}
35
36// get: right subtree case
37impl<Target, Req, SubtreeL, SubtreeR, SubtreePath> Get<Target, Right<SubtreePath>>
38    for Node<Req, SubtreeL, SubtreeR>
39where
40    SubtreeR: Get<Target, SubtreePath>,
41{
42    fn get(&self) -> &Target {
43        self.prev_right.get()
44    }
45
46    fn get_mut(&mut self) -> &mut Target {
47        self.prev_right.get_mut()
48    }
49}