1
2pub struct Nodes<T> {
3 data: Vec<Node<T>>
4}
5
6impl<T> Nodes<T> {
7 pub fn new() -> Nodes<T> {
8 Nodes {
9 data: Vec::new()
10 }
11 }
12
13 pub fn add_node(&mut self, member: Node<T>) {
14 self.data.push(member)
15 }
16
17 pub fn is_empty(&mut self) -> bool {
18 self.data.len() == 0
19 }
20
21 pub fn pop_node(&mut self) -> Option<Node<T>>{
22 self.data.pop()
23 }
24}
25
26pub struct Node<T> {
27 key: String,
28 value: Option<T>
29}
30
31impl<T> Node<T> {
32 pub fn new(t_key: &str, t_value: Option<T>) -> Node<T>{
33 Node {
34 key: String::from(t_key),
35 value: Option::from(t_value)
36 }
37 }
38}
39
40
41
42
43
44#[cfg(test)]
45mod tests {
46 use super::*;
47
48 #[test]
49 fn add_node_to_nodes() {
50 let mut n: Nodes<&str> = Nodes::new();
51 let d = Node::new("Key1", Option::from("Hello"));
52 n.add_node(d);
53 let dd = n.pop_node();
54 assert!(dd.is_some());
55 match dd {
56 Some(node) => match node.value {
57 Some(value) => {
58 assert_eq!(node.key, "Key1");
59 assert_eq!(value, "Hello")
60 },
61 None => {}
62 },
63 None => {}
64 }
65 }
66
67 #[test]
68 fn pop_empty_nodes(){
69 let mut n: Nodes<&str> = Nodes::new();
70 let dd = n.pop_node();
71 assert!(dd.is_none())
72 }
73 #[test]
74 fn nodes_is_empty(){
75 let mut n: Nodes<&str> = Nodes::new();
76 assert!(n.is_empty())
77 }
78}