1 个不稳定版本

0.1.0 2019 年 4 月 18 日

#1559文件系统

无许可证

4KB

directree

一个宏,用于在编译时表达目录树。


示例

可以使用 directree 宏以这种方式表达文件层次结构

use directree::directree;

mod paths {
    directree! {
        foo: "dir" {
            bar: "file.toml",

            // Note that an empty {} is allowed, but does nothing other than
            // visually distinguish whether it's supposed to be a file or a
            // directory.
            baz: "subdir" {},
        }
    }
}

directree 将此 DSL 转换为一系列具有相同层次结构的模块和函数

mod paths {
    fn foo() -> &'static std::path::Path {
        std::path::Path::new("dir")
    }
    mod foo {
        fn bar() -> &'static std::path::Path {
            std::path::Path::new("dir/file.toml")
        }
        fn baz() -> &'static std::path::Path {
            std::path::Path::new("dir/subdir")
        }
    }
}

然后可以在正常代码中使用这些来获取指定的文件和目录

let foo_dir = std::fs::OpenOptions::new()
    .read(true)
    .open(crate::paths::foo())?;

let bar_file = std::fs::OpenOptions::new()
    .read(true)
    .open(crate::paths::foo::bar())?;

为什么这样做?

能够在同一处指定软件需要访问的所有文件和目录是非常有用的。这样做可以为软件提供一个关于磁盘上事物名称及其存储位置的单一真相来源。使用此项目还可以让编译器捕获模块和函数名称中的错误,而不是手动验证手写的目录。

依赖关系

~2MB
~46K SLoC