Decompress

github crates.io docs.rs build status

A library that supports decompression of archives in multiple formats, inspired by ergonomics from Node's decompress.

Dependency

toml [dependencies] decompress = "0.1.0"

Usage

Default use:

rust decompress::decompress(archive, to, &ExtractOpts::default());

Strip the first component of all paths in the archive (for when you have a wrapper folder you don't need):

rust decompress::decompress(archive, to, &ExtractOpts{ strip: 1 });

A micro optimization:

rust let decompressor = decompress::Decompress::default() // use decompressor // decompressor.decompress(...)

Build your own stack:

rust use regex::Regex; let decompressor = decompress::Decompress::build(vec![decompressors::zip::Zip::build(Some( Regex::new(r".*").unwrap(), ))]); // use decompressor // decompressor.decompress(...)

It's also possible to filter unwanted files, similar to nodejs decompress rust let decompressor = decompress::Decompress::default(); let res = decompressor.decompress( archive, to, &ExtractOptsBuilder::default() .strip(strip) .filter(|path| { if let Some(path) = path.to_str() { return path.ends_with("abc.sh"); } false }) .build() .unwrap(), );

Mapping paths is also supported rust let decompressor = decompress::Decompress::default(); let res = decompressor.decompress( archive, to, &ExtractOptsBuilder::default() .strip(strip) .map(|path| { let mut path = path.to_path_buf(); path.set_file_name(format!( "abc-{}", path.file_name().unwrap().to_str().unwrap() )); path.into() }) .build() .unwrap(), );

Copyright

Copyright (c) 2022 @jondot. See LICENSE for further details.