1use super::*;
2
3pub struct Layer<Node> {
4 pub node: Node,
5}
6
7impl Layer<()> {
8 pub fn new<Req>(requirement: Req) -> Layer<Node<Req, (), ()>> {
9 Layer {
10 node: Node {
11 requirement,
12 prev_left: (),
13 prev_right: (),
14 },
15 }
16 }
17
18 #[allow(dead_code)]
19 pub(crate) fn dangerously_new_from_node<Node>(node: Node) -> Layer<Node> {
20 Layer { node }
21 }
22}
23
24impl<Node> Layer<Node> {
25 pub fn get<Target, Direction>(&self) -> &Target
26 where
27 Node: Get<Target, Direction>,
28 {
29 self.node.get()
30 }
31
32 pub fn get_mut<Target, Direction>(&mut self) -> &mut Target
33 where
34 Node: Get<Target, Direction>,
35 {
36 self.node.get_mut()
37 }
38
39 pub fn insert<NewReq, MinDepth, NextPath, Next>(self, new_req: NewReq) -> Layer<Next>
40 where
41 MinDepth: IsNumber,
42 Node: Insert<NewReq, MinDepth, NextPath, Next>,
43 {
44 Layer {
45 node: self.node.insert(new_req),
46 }
47 }
48}