44 个版本 (23 个稳定版)
6.0.0-rc2 | 2024 年 8 月 2 日 |
---|---|
6.0.0-rc1 | 2024 年 5 月 30 日 |
6.0.0-alpha3 | 2024 年 4 月 24 日 |
5.8.1 | 2023 年 11 月 22 日 |
0.4.1 | 2022 年 12 月 13 日 |
#76 在 文件系统 中
每月 103,046 次下载
用于 159 个 Crates(直接使用 17 个)
645KB
15K SLoC
一个用于读取和写入 WEBC 文件的库。
Container
为此 crate 可以处理的各个 WEBC 版本提供了一个抽象。因此,它试图满足最低的共同点,并优先考虑可移植性而不是性能或能力。
use webc::Container;
let bytes: &[u8] = b"\0webc...";
let container = Container::from_bytes(bytes)?;
println!("{:?}", container.manifest());
println!("Atoms:");
for (name, atom) in container.atoms() {
let length = atom.len();
println!("{name}: {length} bytes");
}
for (name, volume) in container.volumes() {
let root_items = volume.read_dir("/").expect("The root directory always exists");
println!("{name}: {} items", root_items.len());
}
一般来说,在延迟操作期间发生的错误将不会被用户访问。
版本特定的后备
如果需要更多灵活性,请考虑使用 [crate::detect()
] 并直接实例化一个兼容的解析器。
use webc::{
Container,
Version,
};
use webc::v1::{ParseOptions, WebC};
use webc::v3::read::OwnedReader;
let bytes: &[u8] = b"...";
match webc::detect(bytes) {
Ok(Version::V1) => {
let options = ParseOptions::default();
let webc = WebC::parse(bytes, &options).unwrap();
if let Some(signature) = webc.signature {
println!("Package signature: {:?}", signature);
}
}
Ok(Version::V3) => {
let webc = OwnedReader::parse(bytes).unwrap();
let index = webc.index();
let signature = &index.signature;
if !signature.is_none() {
println!("Package signature: {signature:?}");
}
}
Ok(other) => todo!("Unsupported version, {other}"),
Err(e) => todo!("An error occurred: {e}"),
}
功能标志
依赖关系
~6–21MB
~327K SLoC