1个不稳定版本
0.1.0 | 2022年8月7日 |
---|
#824 在 文件系统
每月155次下载
用于 l10n_core
23KB
394 行
macro_files
在运行时创建目录和文件的JSON样数据结构消耗宏。
安装
[dependencies]
macro_files = "0.1"
版本要求:rustc 1.56+
示例
创建目录和文件
fn project_readme(project_name: &str) -> String {
format!("# {}", project_name)
}
let project_name = "Project name".to_string();
let adr_directory = "adr";
let temp_dir = macro_files::tempfile::tempdir().unwrap();
macro_files::create!({
temp_dir.path(): {
"README.md": project_readme(&project_name),
".adr-dir": adr_directory,
adr_directory: {
"templates": {
"template.md": "# ADR Template",
}
},
"LICENSE": "MIT"
},
}).unwrap();
let file_contents = std::fs::read(temp_dir.path().join("LICENSE")).unwrap();
assert_eq!(
String::from_utf8_lossy(&file_contents),
"MIT"
);
// Macro expands as:
// {
// #[allow(unused_variables)]
// let path = ::std::path::PathBuf::default();
// {
// let path = &path.join(temp_dir.path());
// $crate::create_dir(&path).and_then(|_| {
// $crate::write_file(path.join("README.md"), (project_readme(&project_name)))
// .and_then(|_| {
// $crate::write_file(path.join(".adr-dir"), adr_directory).and_then(|_| {
// {
// let path = &path.join(adr_directory);
// $crate::create_dir(&path).and_then(|_| {
// let path = &path.join("templates");
// $crate::create_dir(&path).and_then(|_| {
// $crate::write_file(
// path.join("template.md"),
// "# ADR Template",
// )
// .and_then(|_| Ok::<(), ::std::io::Error>(()))
// })
// })
// }
// .and_then(|_| $crate::write_file(path.join("LICENSE"), "MIT"))
// })
// })
// })
// }
// .and_then(|_| Ok::<(), ::std::io::Error>(()))
// }
在临时目录中创建目录和文件。
这需要默认功能 tempfile
,它使用 tempfile
crate。
该宏将返回一个 tempfile::TempDir
结构,临时目录将存在于返回的 tempfile::TempDir
结构未被丢弃之前(请参阅文档)。
let temp_dir = macro_files::create_temp!({
"README.md": "# Project name",
"LICENSE": "MIT",
}).unwrap();
let file_contents = std::fs::read(temp_dir.path().join("README.md")).unwrap();
assert_eq!(
String::from_utf8_lossy(&file_contents),
"# Project name"
);
许可
许可协议为以下之一
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您提交的任何有意包含在工作中的贡献,都应如上所述双许可,没有任何附加条款或条件。
依赖关系
~2–10MB
~109K SLoC