Crates.io | list_files_macro |
lib.rs | list_files_macro |
version | 0.1.0 |
source | src |
created_at | 2022-08-17 19:15:49.603929 |
updated_at | 2022-08-17 19:15:49.603929 |
description | A simple proc macro to generate a const list of filenames and optionally apply a macro to each |
homepage | https://github.com/LukeMiles49/list-files-macro-rs |
repository | https://github.com/LukeMiles49/list-files-macro-rs |
max_upload_size | |
id | 647728 |
size | 7,822 |
A simple proc macro to generate a const list of filenames and optionally apply a macro to each.
use std::fs::canonicalize;
use list_files_macro::list_files;
fn get_full_path(path: &str) -> String {
canonicalize(path).unwrap().into_os_string().into_string().unwrap()
}
const FILENAMES: [&'static str; 3] = list_files!("../tests/files/*.rs");
assert_eq!(FILENAMES, [
"tests/files/a.rs",
"tests/files/b.rs",
"tests/files/c.rs",
].map(get_full_path));
const CONTENTS: [&'static str; 3] = list_files!(include_str, "../tests/files/*.rs");
assert_eq!(CONTENTS[0], r#"
pub fn run() -> &'static str {
"A"
}
"#);
macro_rules! run_file {
($x:expr) => {
{
#[path = $x]
mod file;
file::run()
}
};
}
let results = list_files!(run_file, "../tests/files/*.rs");
assert_eq!(results, [
"A",
"B",
"C",
]);
To use this, add it as a dependency to your Cargo.toml:
[dependencies]
list_files_macro = "^0.1.0"