#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum CompressionCodec {
Gzip,
Bzip2,
Xz,
Zstd,
}
impl CompressionCodec {
#[must_use]
pub const fn extension(self) -> &'static str {
match self {
Self::Gzip => "tar.gz",
Self::Bzip2 => "tar.bz2",
Self::Xz => "tar.xz",
Self::Zstd => "tar.zst",
}
}
#[must_use]
pub const fn name(self) -> &'static str {
match self {
Self::Gzip => "gzip",
Self::Bzip2 => "bzip2",
Self::Xz => "xz",
Self::Zstd => "zstd",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_codec_extension() {
assert_eq!(CompressionCodec::Gzip.extension(), "tar.gz");
assert_eq!(CompressionCodec::Bzip2.extension(), "tar.bz2");
assert_eq!(CompressionCodec::Xz.extension(), "tar.xz");
assert_eq!(CompressionCodec::Zstd.extension(), "tar.zst");
}
#[test]
fn test_codec_name() {
assert_eq!(CompressionCodec::Gzip.name(), "gzip");
assert_eq!(CompressionCodec::Bzip2.name(), "bzip2");
assert_eq!(CompressionCodec::Xz.name(), "xz");
assert_eq!(CompressionCodec::Zstd.name(), "zstd");
}
#[test]
fn test_codec_equality() {
assert_eq!(CompressionCodec::Gzip, CompressionCodec::Gzip);
assert_ne!(CompressionCodec::Gzip, CompressionCodec::Bzip2);
}
#[test]
fn test_codec_hash() {
use std::collections::HashSet;
let mut set = HashSet::new();
set.insert(CompressionCodec::Gzip);
set.insert(CompressionCodec::Bzip2);
set.insert(CompressionCodec::Gzip);
assert_eq!(set.len(), 2);
assert!(set.contains(&CompressionCodec::Gzip));
assert!(set.contains(&CompressionCodec::Bzip2));
}
}