1use super::*;
2
3pub trait Get<Target, Path> {
6 fn get(&self) -> &Target;
7 fn get_mut(&mut self) -> &mut Target;
8}
9
10impl<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
21impl<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
36impl<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}