aboutsummaryrefslogtreecommitdiff
path: root/crates/rsli/src/compress/deflate.rs
blob: 154e0e3ae2c60090de6e5bf30570db4ae0cbf9d2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use crate::error::Error;
use crate::Result;
use flate2::read::{DeflateDecoder, ZlibDecoder};
use std::io::Read;

/// Decode Deflate or Zlib compressed data
pub fn decode_deflate(packed: &[u8]) -> Result<Vec<u8>> {
    let mut out = Vec::new();
    let mut decoder = DeflateDecoder::new(packed);
    if decoder.read_to_end(&mut out).is_ok() {
        return Ok(out);
    }

    out.clear();
    let mut zlib = ZlibDecoder::new(packed);
    zlib.read_to_end(&mut out)
        .map_err(|_| Error::DecompressionFailed("deflate"))?;
    Ok(out)
}