use flate2::read::GzDecoder; use flate2::write::GzEncoder; use flate2::Compression; use std::fs::{create_dir_all, File}; use std::path::Path; use tar::{Archive, Builder}; use crate::error::Error; pub fn to_tar_gz(src: &Path, dest: &Path) -> Result<(), Error> { let f = File::create(dest)?; let gz_encoder = GzEncoder::new(f, Compression::default()); let mut tar_encoder = Builder::new(gz_encoder); tar_encoder.append_dir_all(".", src)?; let gz_encoder = tar_encoder.into_inner()?; gz_encoder.finish()?; Ok(()) } pub fn from_tar_gz(src: impl AsRef, dest: impl AsRef) -> Result<(), Error> { println!("inflating from {:?} to {:?}", src.as_ref(), dest.as_ref()); let f = File::open(&src)?; let gz = GzDecoder::new(f); let mut ar = Archive::new(gz); create_dir_all(&dest)?; ar.unpack(&dest)?; println!("here"); Ok(()) }