rh-foundation 0.2.0-beta.2

Foundation crate providing common utilities, error handling, and shared functionality
Documentation
use std::fs;
use std::path::Path;

use flate2::read::GzDecoder;
use tar::Archive;

use super::{LoaderError, LoaderResult, PackageDist};

pub(super) fn verify_tarball_checksum(
    _tarball_data: &[u8],
    _dist: &PackageDist,
) -> LoaderResult<()> {
    tracing::debug!("Checksum verification not yet implemented");
    Ok(())
}

pub(super) fn extract_tarball(tarball_data: &[u8], extract_to: &Path) -> LoaderResult<()> {
    tracing::debug!("Extracting tarball to: {}", extract_to.display());

    fs::create_dir_all(extract_to)?;

    let tar_decoder = GzDecoder::new(tarball_data);
    let mut archive = Archive::new(tar_decoder);

    archive
        .unpack(extract_to)
        .map_err(|e| LoaderError::ArchiveError {
            message: format!("Failed to extract tarball: {e}"),
        })?;

    Ok(())
}