sevenz-rust2 0.8.0

A 7z decompressor/compressor written in pure Rust
Documentation

Crate Documentation

This project is a 7z compressor/decompressor written in pure Rust.

This is a fork of the original, unmaintained sevenz-rust crate to continue the development and maintenance.

Supported Codecs & filters

Codec Decompression Compression
COPY
LZMA
LZMA2
BROTLI (*)
BZIP2 (*)
DEFLATE (*)
LZ4 (*)
ZSTD (*)

(*) Require optional feature.

All optional codes are a best effort implementation, since there is no definite specification about their implementation in 7z. We use the IDs provided by the specification provided by Py7zr.

Filter Decompression Compression
BCJ X86
BCJ PPC
BCJ IA64
BCJ ARM
BCJ ARM_THUMB
BCJ SPARC
DELTA
BCJ2

Usage

[dependencies]
sevenz-rust = { version = "0.7" }

Decompress source file "data/sample.7z" to destination path "data/sample":

sevenz_rust2::decompress_file("data/sample.7z", "data/sample").expect("complete");

Decompress an encrypted 7z file

Add the 'aes256' feature:

[dependencies]
sevenz-rust2 = { version = "0.7", features = ["aes256"] }
sevenz_rust2::decompress_file_with_password("path/to/encrypted.7z", "path/to/output", "password".into()).expect("complete");

Compression

Add the 'compress' feature:

[dependencies]
sevenz-rust2 = { version = "0.7", features = ["compress"] }

Use the helper function to create a 7z file with source path:

sevenz_rust2::compress_to_path("examples/data/sample", "examples/data/sample.7z").expect("compress ok");

Compress with AES encryption

Add the 'compress' and 'aes256' feature:

[dependencies]
sevenz-rust2 = { version = "0.7", features = ["compress", "aes256"] }

Use the helper function to create a 7z file with source path and password:

sevenz_rust2::compress_to_path_encrypted("examples/data/sample", "examples/data/sample.7z", "password".into()).expect("compress ok");

Advanced Usage

Solid compression

Solid archives can in theory provide better compression rates, but decompressing a file needs all previous data to also be decompressed.

use sevenz_rust2::*;

let mut sz = SevenZWriter::create("dest.7z").expect("create writer ok");
sz.push_source_path("path/to/compress", | _ | true).expect("pack ok");
sz.finish().expect("compress ok");

Configure the compression methods

With encryption and lzma2 options:

use sevenz_rust2::*;

let mut sz = SevenZWriter::create("dest.7z").expect("create writer ok");
sz.set_content_methods(vec![
    sevenz_rust::AesEncoderOptions::new("sevenz-rust".into()).into(),
    lzma::LZMA2Options::with_preset(9).into(),
]);
sz.push_source_path("path/to/compress", | _ | true).expect("pack ok");
sz.finish().expect("compress ok");

Licence

Licensed under the Apache License, Version 2.0.