1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
use tree_layout::{layout, NodeInfo, TreeBox};
#[derive(Debug, Clone)]
pub struct Tree;
#[derive(Debug, Clone)]
pub struct Node {
pub id: usize,
pub children: Vec<Node>,
}
impl<'n> NodeInfo<&'n Node> for Tree {
type Key = usize;
fn key(&self, node: &'n Node) -> Self::Key {
node.id
}
fn children(&self, node: &'n Node) -> impl Iterator<Item = &'n Node> {
node.children.iter()
}
fn dimensions(&self, _: &'n Node) -> TreeBox {
TreeBox::square(0.5)
}
fn border(&self, _: &'n Node) -> TreeBox {
TreeBox { top: 1.5, right: 3.5, bottom: 1.5, left: 3.5 }
}
}
pub fn labeller(_: &Tree, node: &Node) -> String {
format!("{}", node.id)
}
fn tree() -> Node {
Node {
id: 0,
children: vec![
Node {
id: 1,
children: vec![
Node { id: 6, children: vec![] },
Node {
id: 7,
children: vec![Node {
id: 12,
children: vec![
Node { id: 18, children: vec![] },
Node { id: 19, children: vec![] },
Node { id: 20, children: vec![] },
Node { id: 21, children: vec![] },
Node { id: 22, children: vec![] },
],
}],
},
],
},
Node { id: 2, children: vec![] },
Node {
id: 3,
children: vec![
Node { id: 8, children: vec![Node { id: 13, children: vec![] }] },
Node {
id: 9,
children: vec![
Node { id: 14, children: vec![Node { id: 23, children: vec![] }] },
Node {
id: 15,
children: vec![
Node { id: 24, children: vec![] },
Node { id: 25, children: vec![] },
Node {
id: 26,
children: vec![
Node { id: 30, children: vec![] },
Node {
id: 31,
children: vec![
Node { id: 33, children: vec![] },
Node { id: 34, children: vec![] },
Node { id: 35, children: vec![] },
],
},
],
},
Node { id: 27, children: vec![] },
],
},
],
},
Node { id: 10, children: vec![Node { id: 16, children: vec![Node { id: 28, children: vec![] }] }] },
],
},
Node { id: 4, children: vec![] },
Node {
id: 5,
children: vec![Node {
id: 11,
children: vec![Node {
id: 17,
children: vec![Node {
id: 29,
children: vec![Node {
id: 32,
children: vec![
Node { id: 36, children: vec![] },
Node { id: 37, children: vec![] },
Node { id: 38, children: vec![] },
],
}],
}],
}],
}],
},
],
}
}
fn main() {
let root = tree();
let layout = layout(&Tree, &root);
println!("{:#?}", layout)
}