use-archive 0.1.0

Feature-gated facade crate for RustUse archive primitives
Documentation
use use_archive::{
    ArchiveEncoding, ArchiveEntry, ArchiveEntryKind, ArchiveFormat, ArchiveManifest, ArchivePolicy,
    CompressionFormat, is_safe_relative_archive_path,
};

fn main() {
    let encoding = ArchiveEncoding::from_extension("release.tar.zst");

    assert_eq!(encoding.archive, ArchiveFormat::Tar);
    assert_eq!(encoding.compression, CompressionFormat::Zstd);
    assert!(is_safe_relative_archive_path("docs/readme.md"));
    assert!(!is_safe_relative_archive_path("../secrets.env"));

    let policy = ArchivePolicy::strict();
    let manifest = ArchiveManifest::new(encoding).with_entries(vec![
        ArchiveEntry::new("docs/readme.md", ArchiveEntryKind::File).with_size(128),
    ]);

    assert!(policy.allows_entries(manifest.entries()));
    assert_eq!(manifest.file_count(), 1);
    assert_eq!(manifest.total_size(), 128);
}