Skip to main content

archive_basic_usage/
basic_usage.rs

1use use_archive::{
2    ArchiveEncoding, ArchiveEntry, ArchiveEntryKind, ArchiveFormat, ArchiveManifest, ArchivePolicy,
3    CompressionFormat, is_safe_relative_archive_path,
4};
5
6fn main() {
7    let encoding = ArchiveEncoding::from_extension("release.tar.zst");
8
9    assert_eq!(encoding.archive, ArchiveFormat::Tar);
10    assert_eq!(encoding.compression, CompressionFormat::Zstd);
11    assert!(is_safe_relative_archive_path("docs/readme.md"));
12    assert!(!is_safe_relative_archive_path("../secrets.env"));
13
14    let policy = ArchivePolicy::strict();
15    let manifest = ArchiveManifest::new(encoding).with_entries(vec![
16        ArchiveEntry::new("docs/readme.md", ArchiveEntryKind::File).with_size(128),
17    ]);
18
19    assert!(policy.allows_entries(manifest.entries()));
20    assert_eq!(manifest.file_count(), 1);
21    assert_eq!(manifest.total_size(), 128);
22}