13 个版本
新 0.7.1 | 2024年8月17日 |
---|---|
0.6.0 | 2023年6月11日 |
0.4.1 | 2022年10月25日 |
0.3.0 | 2021年6月1日 |
#147 在 文件系统
3,239 每月下载量
用于 7 个 Crates (4 直接)
36KB
486 行
build-fs-tree
从宏或 YAML 树生成文件系统树。
描述
当我在编写集成测试时,我经常发现自己需要创建临时文件和目录。因此,我创建了这个 crate,它提供了一个用于 Rust 代码的库和一个根据 YAML 结构生成文件系统树的 CLI 程序。
使用示例
库
前往 docs.rs 查看完整的 API 参考。
FileSystemTree
FileSystemTree::build
比 MergeableFileSystemTree::build
更快,但它不会覆盖现有目录,也不会在它们不存在时创建父目录。
use build_fs_tree::{FileSystemTree, Build, dir, file};
let tree: FileSystemTree<&str, &str> = dir! {
"index.html" => file!(r#"
<!DOCTYPE html>
<link rel="stylesheet" href="styles/style.css" />
<script src="scripts/main.js"></script>
"#)
"scripts" => dir! {
"main.js" => file!(r#"document.write('Hello World')"#)
}
"styles" => dir! {
"style.css" => file!(r#":root { color: red; }"#)
}
};
tree.build("public").unwrap();
MergeableFileSystemTree
与 FileSystemTree::build
不同,MergeableFileSystemTree::build
可以覆盖现有目录,并创建之前不存在的父目录,但这是以性能为代价的。
您可以通过 From::from
/Into::into
将 FileSystemTree
转换为 MergeableFileSystemTree
,反之亦然。
use build_fs_tree::{MergeableFileSystemTree, Build, dir, file};
let tree = MergeableFileSystemTree::<&str, &str>::from(dir! {
"public" => dir! {
"index.html" => file!(r#"
<!DOCTYPE html>
<link rel="stylesheet" href="styles/style.css" />
<script src="scripts/main.js"></script>
"#)
"scripts/main.js" => file!(r#"document.write('Hello World')"#)
"scripts/style.css" => file!(r#":root { color: red; }"#)
}
});
tree.build(".").unwrap();
序列化和反序列化
两者 FileSystemTree
和 MergeableFileSystemTree
都实现了 serde::Deserialize
和 serde::Serialize
。
程序
命令的名称是 build-fs-tree
。它有两个子命令: create
和 populate
。
create
此命令从 stdin 读取 YAML 并创建新的文件系统树。它是 CLI 对应的 FileSystemTree
。
在新的目录中创建两个文本文件
echo '{ foo.txt: HELLO, bar.txt: WORLD }' | build-fs-tree create foo-and-bar
创建一个文本文件及其父目录
echo '{ text-files: { foo.txt: HELLO } }' | build-fs-tree create files
从YAML文件创建一个新的文件系统树
build-fs-tree create root < fs-tree.yaml
填充
此命令从stdin读取YAML,要么创建一个新的文件系统树,要么将文件和目录添加到已存在的目录中。它是MergeableFileSystemTree
的命令行界面等效。
在当前目录中创建两个文本文件
echo '{ foo.txt: HELLO, bar.txt: WORLD }' | build-fs-tree populate .
创建一个文本文件及其父目录
echo '{ files/text-files/foo.txt: HELLO }' | build-fs-tree populate .
根据YAML文件中描述的文件系统树填充当前目录
build-fs-tree populate . < fs-tree.yaml
打包状态
常见问题
为什么选择YAML?
它具有我想要的功能:易于阅读和编写,正确处理多行字符串。
关于这种酷的配置格式呢?
根据UNIX哲学,您可以将您的酷配置格式通过管道传递给一个程序,该程序将其转换为JSON(YAML是JSON的超集),然后将JSON输出通过管道传递给build-fs-tree
。
许可证
依赖关系
~2–3MB
~63K SLoC