#embed #assets #include #compression-level

无 std 构建 staticfilemap

在编译期间嵌入可选压缩文件的进程宏

14 个不稳定版本 (6 个破坏性版本)

0.7.0 2023 年 11 月 18 日
0.6.1 2023 年 5 月 16 日
0.5.0 2023 年 2 月 2 日
0.4.1 2022 年 5 月 4 日
0.1.2 2020 年 4 月 22 日

#675 in 构建工具

Download history 22/week @ 2024-03-09 4/week @ 2024-03-16 132/week @ 2024-03-23 10/week @ 2024-03-30 1/week @ 2024-04-06 14/week @ 2024-05-18 4/week @ 2024-05-25

每月 125 次下载
用于 wrappe

自定义许可证

17KB
272

staticfilemap

Crates.io Docs.rs Tests & Checks

在编译期间嵌入可选压缩文件的进程宏。

类似于 include_file!include_dir!,但接受通过环境变量指定的文件列表,并支持使用 LZ4zstd 进行压缩。

用法

StaticFileMap 继承以创建映射。

使用 filesnames 属性指定要包含的文件以及它们应通过什么名称访问。这些可以是包含用 ; 分隔的值的字符串,或者当 parse 属性设置为 env 时,包含它们的环境变量。相对路径相对于 CARGO_MANIFEST_DIR 进行解析。如果没有指定 names 属性,名称将根据文件名推断。

压缩级别由 compression 属性控制。压缩级别大于 0 时,包含的文件将使用 Zstd 进行压缩。Zstd 支持的压缩级别高达 22。或者,可以通过将 algorithm 属性设置为 lz4 使用 LZ4 进行压缩。LZ4 接受的压缩级别高达 12

提供了 cargo 特性 zstdlz4 以选择压缩支持。zstd 默认启用。

文件可以通过运行时使用&'static [u8]切片的get(name)get_match(name)函数进行访问。当只有一个名称匹配时,get_match(name)接受部分名称。keys()返回所有键的列表。

请参阅示例,测试实现以获取详细信息。

依赖项

[dependencies]
staticfilemap = "^0.7"

示例

use staticfilemap::StaticFileMap;

#[derive(StaticFileMap)]
#[names("a;b")]
#[files("README.md;LICENSE")]
struct StaticMap;

fn main() {
    let content: &[u8] = StaticMap::get("b").unwrap();
    let keys: &[&str] = StaticMap::keys();
}
use staticfilemap::StaticFileMap;
use minilz4::Decode;
use std::io::Read;

#[derive(StaticFileMap)]
#[parse("env")]
#[names("FILENAMES")]
#[files("FILEPATHS")]
#[compression(8)]
#[algorithm("lz4")]
struct StaticMap;

fn main() {
    let compressed = StaticMap::get_match("diogenes")
        .expect("file matching diogenes was not included");
    let content = compressed.decode();
}
use staticfilemap::StaticFileMap;
use zstd::decode_all;

#[derive(StaticFileMap)]
#[parse("env")]
#[names("FILENAMES")]
#[files("FILEPATHS")]
#[compression(8)]
struct StaticMap;

fn main() {
    let mut compressed = StaticMap::get("diogenes.txt")
        .expect("file diogenes.txt was not included");
    let content = decode_all(&mut compressed);
}
use staticfilemap::StaticFileMap;

#[derive(StaticFileMap)]
#[files("README.md;LICENSE")]
struct StaticMap;

fn main() {
    for (key, data) in StaticMap::iter() {
        println!("{}: {}", key, String::from_utf8_lossy(data));
    }
}

依赖项

约4MB
约71K SLoC