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 构建工具
每月 125 次下载
用于 wrappe
17KB
272 行
staticfilemap
在编译期间嵌入可选压缩文件的进程宏。
类似于 include_file!
或 include_dir!
,但接受通过环境变量指定的文件列表,并支持使用 LZ4 或 zstd 进行压缩。
用法
从 StaticFileMap
继承以创建映射。
使用 files
和 names
属性指定要包含的文件以及它们应通过什么名称访问。这些可以是包含用 ;
分隔的值的字符串,或者当 parse
属性设置为 env
时,包含它们的环境变量。相对路径相对于 CARGO_MANIFEST_DIR
进行解析。如果没有指定 names
属性,名称将根据文件名推断。
压缩级别由 compression
属性控制。压缩级别大于 0
时,包含的文件将使用 Zstd 进行压缩。Zstd 支持的压缩级别高达 22
。或者,可以通过将 algorithm
属性设置为 lz4
使用 LZ4 进行压缩。LZ4 接受的压缩级别高达 12
。
提供了 cargo 特性 zstd
和 lz4
以选择压缩支持。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