easy_archive/archive/tar_zstd/
encode.rs1use crate::{
3 File, Fmt,
4 error::{ArchiveError, Result},
5 traits::Encode,
6};
7use std::io::Cursor;
8
9use super::TarZstd;
10
11impl Encode for TarZstd {
12 fn encode(files: Vec<File>) -> Result<Vec<u8>> {
13 let tar = Fmt::Tar.encode(files)?;
14 let mut cursor = Cursor::new(tar);
15 let mut compressed = Vec::new();
16
17 {
18 let mut encoder = zstd::Encoder::new(&mut compressed, 6).map_err(|e| {
20 ArchiveError::CompressionError(format!("Failed to create Zstd encoder: {}", e))
21 })?;
22
23 std::io::copy(&mut cursor, &mut encoder).map_err(|e| {
24 ArchiveError::CompressionError(format!("Zstd compression failed: {}", e))
25 })?;
26
27 encoder.finish().map_err(|e| {
28 ArchiveError::CompressionError(format!("Zstd finalization failed: {}", e))
29 })?;
30 }
31
32 Ok(compressed)
33 }
34}