#directory #fs #macro #file #data-structures

macro_files

在运行时创建目录和文件的JSON样数据结构消耗宏

1个不稳定版本

0.1.0 2022年8月7日

#824文件系统

Download history 24/week @ 2024-03-31 1/week @ 2024-04-07

每月155次下载
用于 l10n_core

MIT/Apache

23KB
394

macro_files

CI badge Crate badge Rustc badge

在运行时创建目录和文件的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-2.0许可证定义的,您提交的任何有意包含在工作中的贡献,都应如上所述双许可,没有任何附加条款或条件。

依赖关系

~2–10MB
~109K SLoC