#embed #folder #directory #http #include #tool-embed-files

app embed_dir

用于在Rust程序中嵌入文件夹的小程序

3个不稳定版本

使用旧的Rust 2015

0.2.0 2017年8月7日
0.1.1 2017年8月3日
0.1.0 2017年8月3日

文件系统中排名第1377

每月下载量28

GPL-3.0许可协议

16KB
156行代码(不包括注释)

Embed-dir for Rust

crate.io包... https://crates.io/crates/embed_dir/0.1.0

您在Rust中拥有强大的宏include_bytes!

但有时这还不够。您可能需要嵌入多个文件,通常在一个文件夹中。

为了自动化这个过程,这个简单的小工具会为您生成代码。

[注意]也许在未来,这个工具可以被集成到编译过程中的build

运行工具

如果您运行程序而没有参数或参数数量不正确

    Simple program to generate code to embed files recursivily from a chosen folder.

    It will generate a source file with code to embed the files on folder.

    More info:  https://github.com/jleahred/embed_dir

    Usage:
        embed_dir  <origin-folder>  <destiny-file>

    where:
        origin-folder   string is the path to the folder containing the files to embed
        destiny-file    string is output filename (without .rs extension)


    example:

        embed_dir src/public src/embed.rs

在自己的项目目录中的示例

cargo run test_folder src/test/pr.rs

生成的代码

这将为每个目录生成一个文件

[source, rust]

//  autogenerated  embed_dir  on ...


macro_rules! gen_get_includes_bytes{
    ($rel_path:expr, $($file:expr),+) => {
        pub fn get(file_name: &str) -> Option<&'static [u8]> {
            match file_name {
                $(
                    $file => Some(include_bytes!(concat!($rel_path, $file))),
                )+
                _ => None,
            }
        }
    }
}


gen_get_includes_bytes!("../../test_folder",
          "README.adoc",
          "Cargo.toml",
          "pr/README.adoc"
);

第一个字符串表示从生成的源文件到文件的相对位置。

[source, rust]

"../../http_static/",

接下来的字符串是包含的文件(它们可以嵌套在文件夹中)。

使用代码

非常简单直接,只需调用创建的模块上的get函数并传递文件名。

[source, rust]

    match super::http_static2::get("index.html") {
        Some(content) => content,
        None => &[] as &'static [u8],
    }

无运行时依赖