Documentation
use std::io::{self, Write};

use zstd::stream::{Decoder, Encoder};

pub fn e(data: impl AsRef<[u8]>) -> io::Result<Vec<u8>> {
  let data = data.as_ref();
  let mut encoder = Encoder::new(Vec::new(), 19)?;
  encoder.write_all(data)?;
  let compressed_data = encoder.finish()?;
  Ok(compressed_data)
}

pub fn d(data: impl AsRef<[u8]>) -> io::Result<Vec<u8>> {
  let data = data.as_ref();
  let mut decoder = Decoder::new(data)?;
  let mut decompressed_data = Vec::new();
  io::copy(&mut decoder, &mut decompressed_data)?;
  Ok(decompressed_data)
}