~repos /rust-embed
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.
6af8ee20
—
pyrossh 5 minutes ago
Fix RustEmbed::iter() signature
- impl/src/lib.rs +2 -2
- src/lib.rs +1 -1
- tests/lib.rs +14 -0
impl/src/lib.rs
CHANGED
|
@@ -93,7 +93,7 @@ fn embedded(
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
/// Iterates over the file paths in the folder.
|
|
96
|
-
pub fn iter() -> impl ::std::iter::Iterator<Item = ::std::borrow::Cow<'static, str>> {
|
|
96
|
+
pub fn iter() -> impl ::std::iter::Iterator<Item = ::std::borrow::Cow<'static, str>> + 'static {
|
|
97
97
|
Self::names().map(|x| ::std::borrow::Cow::from(*x))
|
|
98
98
|
}
|
|
99
99
|
}
|
|
@@ -188,7 +188,7 @@ fn dynamic(
|
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
/// Iterates over the file paths in the folder.
|
|
191
|
-
pub fn iter() -> impl ::std::iter::Iterator<Item = ::std::borrow::Cow<'static, str>> {
|
|
191
|
+
pub fn iter() -> impl ::std::iter::Iterator<Item = ::std::borrow::Cow<'static, str>> + 'static {
|
|
192
192
|
use ::std::path::Path;
|
|
193
193
|
|
|
194
194
|
|
src/lib.rs
CHANGED
|
@@ -45,7 +45,7 @@ pub trait RustEmbed {
|
|
|
45
45
|
/// is used.
|
|
46
46
|
///
|
|
47
47
|
/// Otherwise, the files are listed from the file system on each call.
|
|
48
|
-
fn iter() -> impl Iterator<Item = std::borrow::Cow<'static, str>>;
|
|
48
|
+
fn iter() -> impl Iterator<Item = std::borrow::Cow<'static, str>> + 'static;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
pub use RustEmbed as Embed;
|
tests/lib.rs
CHANGED
|
@@ -56,3 +56,17 @@ fn trait_works_generic_helper<E: rust_embed::Embed>() {
|
|
|
56
56
|
assert_eq!(num_files, 7);
|
|
57
57
|
assert!(E::get("gg.html").is_none(), "gg.html should not exist");
|
|
58
58
|
}
|
|
59
|
+
|
|
60
|
+
/// Test that iter() can be boxed into a trait object.
|
|
61
|
+
/// This is required for libraries like i18n-embed that need to return
|
|
62
|
+
/// `Box<dyn Iterator<Item = String>>` from a trait implementation.
|
|
63
|
+
#[test]
|
|
64
|
+
fn iter_can_be_boxed() {
|
|
65
|
+
fn get_boxed_iter<E: rust_embed::Embed>() -> Box<dyn Iterator<Item = String>> {
|
|
66
|
+
Box::new(E::iter().map(|filename| filename.to_string()))
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
let filenames: Vec<String> = get_boxed_iter::<Asset>().collect();
|
|
70
|
+
assert_eq!(filenames.len(), 7);
|
|
71
|
+
assert!(filenames.contains(&"index.html".to_string()));
|
|
72
|
+
}
|