#file-extension #decompression #gzip #zstd #bzip2 #tokio #file-format

autocompress

Automatically select suitable decoder from magic bytes or encoder from file extension

8 releases (4 breaking)

0.6.0 Dec 24, 2023
0.5.1 Dec 4, 2023
0.4.2 Nov 16, 2023
0.2.2 Jul 18, 2021
0.1.0 Apr 1, 2020

#72 in Compression

Download history 18/week @ 2023-12-23 2/week @ 2024-01-06 2/week @ 2024-01-13 10/week @ 2024-01-20 10/week @ 2024-02-03 13/week @ 2024-02-10 75/week @ 2024-02-17 58/week @ 2024-02-24 21/week @ 2024-03-02 39/week @ 2024-03-09 32/week @ 2024-03-16 65/week @ 2024-03-23 89/week @ 2024-03-30 13/week @ 2024-04-06

205 downloads per month
Used in proxy-rs

Apache-2.0

210KB
4.5K SLoC

autocompress-rs

Build GitHub GitHub top language Crates.io Docs.rs

Automatically select suitable decoder from magic bytes or encoder from file extension. This library also provides I/O thread pool to perform decompression and compression in background threads.

Supported file formats

Feature flags

  • gzip : Gzip format support
  • bgzip : bgzip format support
  • bzip2 : Bzip2 format support
  • xz : XZ format support
  • zstd : Zstd format support
  • rayon : Off-load compression and decompression process to another thread using rayon
  • tokio : Async reader and writer support with tokio
  • tokio_fs: Enable autodetect_async_open function

Example

Read from a file

use std::io::prelude::*;
use autocompress::autodetect_open;

fn main() -> anyhow::Result<()> {
    let mut reader = autodetect_open("testfiles/pg2701.txt.xz")?;
    let mut buf = Vec::new();
    reader.read_to_end(&mut buf)?;
    Ok(())
}

Write to a file

use std::io::prelude::*;
use autocompress::{autodetect_create, CompressionLevel};

fn main() -> anyhow::Result<()> {
    let mut writer = autodetect_create("target/doc-index.xz", CompressionLevel::Default)?;
    writer.write_all(&b"Hello, world\n"[..])?;
    Ok(())
}

Compress file in parallel

use std::io::prelude::*;
use autocompress::{autodetect_parallel_create, CompressionLevel};

fn main() -> anyhow::Result<()> {
  let mut writer = autodetect_parallel_create("target/doc-index2.xz", CompressionLevel::Default)?;
  writer.write_all(&b"Hello, world\n"[..])?;
  Ok(())
}

Dependencies

~0.4–4MB
~71K SLoC