easy_archive/archive/tar_xz/
encode.rs1use crate::{
3 File, Fmt,
4 error::{ArchiveError, Result},
5 traits::Encode,
6};
7use liblzma::write::XzEncoder;
8use std::io::{Cursor, Write};
9
10use super::TarXz;
11
12impl Encode for TarXz {
13 fn encode(files: Vec<File>) -> Result<Vec<u8>> {
14 let tar = Fmt::Tar.encode(files)?;
15
16 let cursor = Cursor::new(Vec::new());
18 let mut encoder = XzEncoder::new(cursor, 6);
19
20 encoder
21 .write_all(&tar)
22 .map_err(|e| ArchiveError::CompressionError(format!("XZ compression failed: {}", e)))?;
23
24 let cursor = encoder.finish().map_err(|e| {
25 ArchiveError::CompressionError(format!("XZ finalization failed: {}", e))
26 })?;
27
28 Ok(cursor.into_inner())
29 }
30}