#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ArchiveFormat {
Tar,
TarGnu,
TarPax,
TarPaxRestricted,
TarUstar,
Zip,
SevenZip,
Ar,
Cpio,
Iso9660,
Xar,
Mtree,
Raw,
Shar,
Warc,
Rar,
Rar5,
Lha,
Cab,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CompressionFormat {
None,
Gzip,
Bzip2,
Xz,
Zstd,
Lz4,
Compress,
UuEncode,
Lzip,
Lrzip,
Lzop,
Grzip,
}
impl ArchiveFormat {
pub fn extension(&self) -> &'static str {
match self {
ArchiveFormat::Tar => "tar",
ArchiveFormat::TarGnu => "tar",
ArchiveFormat::TarPax => "tar",
ArchiveFormat::TarPaxRestricted => "tar",
ArchiveFormat::TarUstar => "tar",
ArchiveFormat::Zip => "zip",
ArchiveFormat::SevenZip => "7z",
ArchiveFormat::Ar => "ar",
ArchiveFormat::Cpio => "cpio",
ArchiveFormat::Iso9660 => "iso",
ArchiveFormat::Xar => "xar",
ArchiveFormat::Mtree => "mtree",
ArchiveFormat::Raw => "bin",
ArchiveFormat::Shar => "shar",
ArchiveFormat::Warc => "warc",
ArchiveFormat::Rar => "rar",
ArchiveFormat::Rar5 => "rar",
ArchiveFormat::Lha => "lha",
ArchiveFormat::Cab => "cab",
}
}
}
impl CompressionFormat {
pub fn extension(&self) -> &'static str {
match self {
CompressionFormat::None => "",
CompressionFormat::Gzip => "gz",
CompressionFormat::Bzip2 => "bz2",
CompressionFormat::Xz => "xz",
CompressionFormat::Zstd => "zst",
CompressionFormat::Lz4 => "lz4",
CompressionFormat::Compress => "Z",
CompressionFormat::UuEncode => "uu",
CompressionFormat::Lzip => "lz",
CompressionFormat::Lrzip => "lrz",
CompressionFormat::Lzop => "lzo",
CompressionFormat::Grzip => "grz",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ReadFormat {
All,
Format(ArchiveFormat),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ZipCompressionMethod {
Store,
Deflate,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct CompressionLevel(u8);
impl CompressionLevel {
pub fn new(level: u8) -> Self {
assert!(level <= 9, "Compression level must be 0-9");
CompressionLevel(level)
}
pub const NONE: Self = CompressionLevel(0);
pub const FASTEST: Self = CompressionLevel(1);
pub const DEFAULT: Self = CompressionLevel(6);
pub const BEST: Self = CompressionLevel(9);
pub fn value(&self) -> u8 {
self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FormatOption {
ZipCompressionMethod(ZipCompressionMethod),
ZipCompressionLevel(CompressionLevel),
Iso9660VolumeId(String),
Iso9660Publisher(String),
Iso9660AllowLowercase(bool),
TarGnuLongPathnames(bool),
SevenZipCompressionLevel(CompressionLevel),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FilterOption {
GzipCompressionLevel(CompressionLevel),
Bzip2CompressionLevel(CompressionLevel),
XzCompressionLevel(CompressionLevel),
ZstdCompressionLevel(u8),
Lz4CompressionLevel(CompressionLevel),
}