easy_archive/archive/tar_gz/
encode.rs1use crate::{
3 File, Fmt,
4 error::{ArchiveError, Result},
5 traits::Encode,
6};
7use flate2::{Compression, bufread::GzEncoder};
8use std::io::{Cursor, Read};
9
10use super::TarGz;
11
12impl Encode for TarGz {
13 fn encode(files: Vec<File>) -> Result<Vec<u8>> {
14 let tar = Fmt::Tar.encode(files)?;
15
16 let estimated_size = tar.len() / 3;
18 let mut cursor = Cursor::new(tar);
19
20 let mut encoder = GzEncoder::new(&mut cursor, Compression::default());
22 let mut compressed = Vec::with_capacity(estimated_size);
23
24 encoder
25 .read_to_end(&mut compressed)
26 .map_err(|e| ArchiveError::CompressionError(format!("GZ compression failed: {}", e)))?;
27
28 Ok(compressed)
29 }
30}