autocompress 0.5.0

Automatically select suitable decoder from magic bytes or encoder from file extension.
Documentation
# autocompress-rs


[![Build](https://github.com/informationsea/autocompress-rs/actions/workflows/build.yml/badge.svg)](https://github.com/informationsea/autocompress-rs/actions/workflows/build.yml)
![GitHub](https://img.shields.io/github/license/informationsea/autocompress-rs)
![GitHub top language](https://img.shields.io/github/languages/top/informationsea/autocompress-rs)
[![Crates.io](https://img.shields.io/crates/v/autocompress)](https://crates.io/crates/autocompress)
[![Docs.rs](https://docs.rs/autocompress/badge.svg)](https://docs.rs/autocompress)

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


- [Gzip]https://www.ietf.org/rfc/rfc1952.txt
- [Zlib]https://www.ietf.org/rfc/rfc1950.txt (Cannot suggest format from magic
  bytes and file extension)
- [BZip2]https://www.sourceware.org/bzip2/
- [XZ]https://tukaani.org/xz/format.html
- [Z-standard]https://facebook.github.io/zstd/

## Feature flags


- `gzip` : Gzip format support
- `bgzip` : [bgzip]https://github.com/informationsea/bgzip-rs 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]https://crates.io/crates/rayon
- `tokio` : Async reader and writer support with
  [tokio]https://crates.io/crates/tokio
- `tokio_fs`: Enable `autodetect_async_open` function

## Example


### Read from a file


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

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

### Write to a file


```rust
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(())
}
```