50 releases (26 stable)
7.0.0-rc.2 | Nov 5, 2024 |
---|---|
6.1.0 | Oct 2, 2024 |
6.0.0-rc1 | May 30, 2024 |
5.8.1 | Nov 22, 2023 |
0.4.1 | Dec 13, 2022 |
#36 in WebAssembly
48,942 downloads per month
Used in 78 crates
(19 directly)
500KB
12K
SLoC
A library for reading and writing WEBC files.
The Container
provides an abstraction over the various WEBC versions
this crate can handle. As such, it tries to cater to the lowest common
denominator and favors portability over performance or power.
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());
}
In general, errors that occur during lazy operations won't be accessible to the user.
Version-Specific Fallbacks
If more flexibility is required, consider using [crate::detect()
] and
instantiating a compatible parser directly.
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}"),
}
Feature Flags
Dependencies
~5–20MB
~276K SLoC