macro_rules! visit_base {
($length:literal, $($contents:expr)*) => {
fn list_assets() -> String {
let root_depth = 0;
[$($contents(root_depth),)*].join("")
}
};
}
macro_rules! visit_folder {
($name:literal, $id:ident, $($contents:expr)*) => {{
fn list_folder(depth: usize) -> String {
let name = $name;
[
indent_line(depth, &format!("{name}/")),
$($contents(depth + 1),)*
]
.join("")
}
list_folder
}};
}
fn indent_line(depth: usize, contents: &str) -> String {
let indentation = " ".repeat(depth);
format!("{indentation}{contents}\n")
}
macro_rules! visit_file {
($name:literal, $id:ident, $index:literal, $relative_path:literal, $absolute_path:literal) => {{
fn list_file(depth: usize) -> String {
indent_line(depth, $name)
}
list_file
}};
}
#[iftree::include_file_tree(
"
paths = '/examples/assets/**'
[[template]]
visit_base = 'visit_base'
visit_folder = 'visit_folder'
visit_file = 'visit_file'
"
)]
pub struct Asset;
fn main() {
assert_eq!(
list_assets(),
"examples/
assets/
.env
configuration/
menu.json
translations.csv
credits.md
world/
levels/
tutorial.json
physical_constants.json
",
);
}