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
//! Example demonstrating the tree! macro DSL for constructing trees.
use treelog::tree;
fn main() {
// Build a tree using the macro DSL
// This is much more concise and readable than manual construction
let tree = tree! {
project {
src {
"main.rs",
"lib.rs"
},
tests {
"test1.rs",
"test2.rs"
},
examples {
"example1.rs"
},
"Cargo.toml",
"README.md"
}
};
println!("Project Structure (Macro DSL):");
println!("{}", tree.render_to_string());
// Example with string node names
let file_tree = tree! {
"home" {
"user" {
"Documents" {
"report.pdf",
"notes.txt"
},
"Projects" {
"myproject" {
"src" {
"main.rs",
"lib.rs"
},
"tests" {
"test.rs"
},
"Cargo.toml"
}
},
"Downloads" {
"file1.zip",
"file2.tar.gz"
}
}
}
};
println!("\nFile System Tree (Macro DSL):");
println!("{}", file_tree.render_to_string());
// Example with mixed syntax (identifiers and strings)
let mixed_tree = tree! {
root {
item1,
"item2",
sub {
"subitem1",
subitem2
}
}
};
println!("\nMixed Syntax Example:");
println!("{}", mixed_tree.render_to_string());
}