~repos /rust-embed
git clone https://pyrossh.dev/repos/rust-embed.git
rust macro which loads files into the rust binary at compile time during release and loads the file from the fs during dev.
a283b903
—
Tangent 128 6 years ago
Impl the RustEmbed trait on asset types
- impl/src/lib.rs +16 -0
- tests/lib.rs +28 -0
impl/src/lib.rs
CHANGED
|
@@ -44,6 +44,14 @@ fn generate_assets(ident: &syn::Ident, folder_path: String) -> quote::Tokens {
|
|
|
44
44
|
get_files(String::from(#folder_path)).map(|e| std::borrow::Cow::from(e.rel_path))
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
impl rust_embed::RustEmbed for #ident {
|
|
48
|
+
fn get(&self, file_path: &str) -> Option<std::borrow::Cow<'static, [u8]>> {
|
|
49
|
+
#ident::get(file_path)
|
|
50
|
+
}
|
|
51
|
+
fn iter(&self) -> Box<dyn Iterator<Item = std::borrow::Cow<'static, str>>> {
|
|
52
|
+
Box::new(#ident::iter())
|
|
53
|
+
}
|
|
54
|
+
}
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
57
|
|
|
@@ -80,6 +88,14 @@ fn generate_assets(ident: &syn::Ident, folder_path: String) -> quote::Tokens {
|
|
|
80
88
|
items.iter().map(|x| std::borrow::Cow::from(*x))
|
|
81
89
|
}
|
|
82
90
|
}
|
|
91
|
+
impl rust_embed::RustEmbed for #ident {
|
|
92
|
+
fn get(&self, file_path: &str) -> Option<std::borrow::Cow<'static, [u8]>> {
|
|
93
|
+
#ident::get(file_path)
|
|
94
|
+
}
|
|
95
|
+
fn iter(&self) -> Box<dyn Iterator<Item = std::borrow::Cow<'static, str>>> {
|
|
96
|
+
Box::new(#ident::iter())
|
|
97
|
+
}
|
|
98
|
+
}
|
|
83
99
|
}
|
|
84
100
|
}
|
|
85
101
|
|
tests/lib.rs
CHANGED
|
@@ -31,3 +31,31 @@ fn iter_works() {
|
|
|
31
31
|
}
|
|
32
32
|
assert_eq!(num_files, 6);
|
|
33
33
|
}
|
|
34
|
+
|
|
35
|
+
#[test]
|
|
36
|
+
fn trait_works_generic() {
|
|
37
|
+
trait_works_generic_helper(&Asset);
|
|
38
|
+
}
|
|
39
|
+
fn trait_works_generic_helper(folder: &impl rust_embed::RustEmbed) {
|
|
40
|
+
let mut num_files = 0;
|
|
41
|
+
for file in folder.iter() {
|
|
42
|
+
assert!(folder.get(file.as_ref()).is_some());
|
|
43
|
+
num_files += 1;
|
|
44
|
+
}
|
|
45
|
+
assert_eq!(num_files, 6);
|
|
46
|
+
assert!(folder.get("gg.html").is_none(), "gg.html should not exist");
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#[test]
|
|
50
|
+
fn trait_works_object() {
|
|
51
|
+
trait_works_object_helper(&Asset);
|
|
52
|
+
}
|
|
53
|
+
fn trait_works_object_helper(folder: &dyn rust_embed::RustEmbed) {
|
|
54
|
+
let mut num_files = 0;
|
|
55
|
+
for file in folder.iter() {
|
|
56
|
+
assert!(folder.get(file.as_ref()).is_some());
|
|
57
|
+
num_files += 1;
|
|
58
|
+
}
|
|
59
|
+
assert_eq!(num_files, 6);
|
|
60
|
+
assert!(folder.get("gg.html").is_none(), "gg.html should not exist");
|
|
61
|
+
}
|