#decompression #lzma #file-format

lzma-rs-perf-exp

A codec for LZMA, LZMA2 and XZ written in pure Rust with performance experiments

1 unstable release

0.2.1 Aug 9, 2022

#665 in Compression

Download history 54/week @ 2024-03-15 43/week @ 2024-03-22 84/week @ 2024-03-29 37/week @ 2024-04-05 67/week @ 2024-04-12 78/week @ 2024-04-19 68/week @ 2024-04-26 122/week @ 2024-05-03 56/week @ 2024-05-10 56/week @ 2024-05-17 59/week @ 2024-05-24 42/week @ 2024-05-31 51/week @ 2024-06-07 72/week @ 2024-06-14 89/week @ 2024-06-21 50/week @ 2024-06-28

276 downloads per month
Used in 2 crates (via chd)

MIT license

130KB
3K SLoC

lzma-rs-perf-exp

Crate Documentation Safety Dance Build Status Minimum rust 1.51

This project is a decoder for LZMA and its variants written in pure Rust, with focus on clarity. It already supports LZMA, LZMA2 and a subset of the .xz file format.

This fork provides some (API-unstable) performance experiments for use in chd-rs, which may gradually be upstreamed. The API is subject to change without a corresponding SemVer-compatible version bump.

Usage

Decompress a .xz file.

let filename = "foo.xz";
let mut f = std::io::BufReader::new(std::fs::File::open(filename).unwrap());
// "decomp" can be anything that implements "std::io::Write"
let mut decomp: Vec<u8> = Vec::new();
lzma_rs::xz_decompress(&mut f, &mut decomp).unwrap();
// Decompressed content is now in "decomp"

Encoder

For now, there is also a dumb encoder that only uses byte literals, with many hard-coded constants for code simplicity. Better encoders are welcome!

Contributing

Pull-requests are welcome, to improve the decoder, add better encoders, or more tests. Ultimately, this project should also implement .xz and .7z files.

License

MIT

Dependencies

~0.2–8MB
~55K SLoC