layer_rs/
layer.rs

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}