Skip to main content

easy_archive/archive/tar_xz/
encode.rs

1/// TAR.XZ encoding implementation
2use 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        // Encode with compression level 6 (balanced speed/compression)
17        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}