~repos /rust-embed

#rust#proc-macro#http

git clone https://pyrossh.dev/repos/rust-embed.git
Discussions: https://groups.google.com/g/rust-embed-devs

rust macro which loads files into the rust binary at compile time during release and loads the file from the fs during dev.


Files changed (2) hide show
  1. impl/src/lib.rs +16 -0
  2. 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
+ }