use crate::types::Result;
use flate2::read::GzDecoder;
use flate2::write::GzEncoder;
use flate2::Compression;
use std::io::{Read, Write};
pub fn decode(input: &[u8]) -> Result<Vec<u8>> {
let mut output = Vec::new();
let mut decoder = GzDecoder::new(input);
decoder.read_to_end(&mut output)?;
Ok(output)
}
pub fn encode(input: &[u8]) -> Result<Vec<u8>> {
let mut encoder = GzEncoder::new(Vec::new(), Compression::default());
encoder.write_all(input)?;
let output = encoder.finish()?;
Ok(output)
}
#[cfg(test)]
mod tests {
use super::*;
quickcheck! {
fn test_decode_inverses_encode(data: Vec<u8>) -> bool {
let encoded = encode(&data).unwrap();
let decoded = decode(&encoded).unwrap();
decoded == data
}
}
}