-
Notifications
You must be signed in to change notification settings - Fork 1
/
configuration_template_visitors_emulation.rs
79 lines (68 loc) · 2.11 KB
/
configuration_template_visitors_emulation.rs
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
macro_rules! visit_array_base {
($length:literal, $($contents:expr)*) => {
static ASSETS: [Asset; $length] = [$($contents,)*];
};
}
macro_rules! visit_array_file {
($name:literal, $id:ident, $index:literal, $relative_path:literal, $absolute_path:literal) => {
Asset {
contents: include_str!($absolute_path),
}
};
}
macro_rules! visit_identifiers_base {
($length:literal, $($contents:item)*) => {
visit_identifiers_folder! { "", base, $($contents)* }
};
}
macro_rules! visit_identifiers_folder {
($name:literal, $id:ident, $($contents:item)*) => {
pub mod $id {
use super::Asset;
use super::ASSETS;
$($contents)*
}
};
}
macro_rules! visit_identifiers_file {
($name:literal, $id:ident, $index:literal, $relative_path:literal, $absolute_path:literal) => {
pub static $id: &Asset = &ASSETS[$index];
};
}
#[iftree::include_file_tree(
"
paths = '/examples/assets/**'
[[template]]
visit_base = 'visit_array_base'
visit_file = 'visit_array_file'
[[template]]
visit_base = 'visit_identifiers_base'
visit_folder = 'visit_identifiers_folder'
visit_file = 'visit_identifiers_file'
"
)]
pub struct Asset {
contents: &'static str,
}
fn main() {
use base::examples::assets;
assert_eq!(ASSETS.len(), 6);
assert_eq!(ASSETS[0].contents, "BASE=https://example.com\n");
assert_eq!(ASSETS[1].contents, "\"Start\"\n");
assert_eq!(ASSETS[2].contents, "Hi {{name}}\n");
assert_eq!(ASSETS[3].contents, "Boo Far\n");
assert_eq!(ASSETS[4].contents, "\"Welcome\"\n");
assert_eq!(ASSETS[5].contents, "7e-3\n");
assert_eq!(assets::_ENV.contents, "BASE=https://example.com\n");
assert_eq!(assets::configuration::MENU_JSON.contents, "\"Start\"\n");
assert_eq!(
assets::configuration::TRANSLATIONS_CSV.contents,
"Hi {{name}}\n",
);
assert_eq!(assets::CREDITS_MD.contents, "Boo Far\n");
assert_eq!(
assets::world::levels::TUTORIAL_JSON.contents,
"\"Welcome\"\n",
);
assert_eq!(assets::world::PHYSICAL_CONSTANTS_JSON.contents, "7e-3\n");
}