#yaml #directory-tree #tree #directory #file #directory-structure

bin+lib build-fs-tree

从宏或 YAML 树生成文件系统树

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文件系统

Download history 704/week @ 2024-05-03 755/week @ 2024-05-10 817/week @ 2024-05-17 1073/week @ 2024-05-24 1260/week @ 2024-05-31 992/week @ 2024-06-07 1003/week @ 2024-06-14 825/week @ 2024-06-21 836/week @ 2024-06-28 810/week @ 2024-07-05 960/week @ 2024-07-12 873/week @ 2024-07-19 1169/week @ 2024-07-26 813/week @ 2024-08-02 490/week @ 2024-08-09 645/week @ 2024-08-16

3,239 每月下载量
用于 7 个 Crates (4 直接)

MIT 许可证

36KB
486

build-fs-tree

Test Crates.io Version

从宏或 YAML 树生成文件系统树。

描述

当我在编写集成测试时,我经常发现自己需要创建临时文件和目录。因此,我创建了这个 crate,它提供了一个用于 Rust 代码的库和一个根据 YAML 结构生成文件系统树的 CLI 程序。

使用示例

前往 docs.rs 查看完整的 API 参考。

FileSystemTree

FileSystemTree::buildMergeableFileSystemTree::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::intoFileSystemTree 转换为 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();

序列化和反序列化

两者 FileSystemTreeMergeableFileSystemTree 都实现了 serde::Deserializeserde::Serialize

程序

命令的名称是 build-fs-tree。它有两个子命令: createpopulate

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

打包状态

Packaging Status

常见问题

为什么选择YAML?

它具有我想要的功能:易于阅读和编写,正确处理多行字符串。

关于这种酷的配置格式呢?

根据UNIX哲学,您可以将您的酷配置格式通过管道传递给一个程序,该程序将其转换为JSON(YAML是JSON的超集),然后将JSON输出通过管道传递给build-fs-tree

许可证

MIT © Hoàng Văn Khải.

依赖关系

~2–3MB
~63K SLoC