#[must_use]
pub fn compression_level_to_flate2(level: Option<u8>) -> flate2::Compression {
match level {
None | Some(6) => flate2::Compression::default(),
Some(1..=3) => flate2::Compression::fast(),
Some(7..=9) => flate2::Compression::best(),
Some(n) => flate2::Compression::new(u32::from(n)),
}
}
#[must_use]
pub fn compression_level_to_bzip2(level: Option<u8>) -> bzip2::Compression {
match level {
None | Some(6) => bzip2::Compression::default(),
Some(1) => bzip2::Compression::fast(),
Some(7..=9) => bzip2::Compression::best(),
Some(n @ 2..=6) => bzip2::Compression::new(u32::from(n)),
Some(n) => bzip2::Compression::new(u32::from(n.min(9))),
}
}
#[must_use]
pub fn compression_level_to_xz(level: Option<u8>) -> u32 {
match level {
None | Some(6) => 6,
Some(n) => u32::from(n),
}
}
#[allow(clippy::match_same_arms)] #[must_use]
pub fn compression_level_to_zstd(level: Option<u8>) -> i32 {
match level {
None | Some(6) => 3,
Some(1) => 1,
Some(2) => 2,
Some(7) => 10,
Some(8) => 15,
Some(9) => 19,
_ => 3,
}
}
#[derive(Debug, Clone, Copy)]
pub enum CompressionLevel {
Flate2(flate2::Compression),
Bzip2(bzip2::Compression),
Xz(u32),
Zstd(i32),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_compression_level_to_flate2() {
let level = compression_level_to_flate2(None);
assert_eq!(level, flate2::Compression::default());
let level = compression_level_to_flate2(Some(6));
assert_eq!(level, flate2::Compression::default());
let level = compression_level_to_flate2(Some(1));
assert_eq!(level, flate2::Compression::fast());
let level = compression_level_to_flate2(Some(9));
assert_eq!(level, flate2::Compression::best());
let level = compression_level_to_flate2(Some(5));
assert_eq!(level, flate2::Compression::new(5));
}
#[test]
fn test_compression_level_to_bzip2() {
let level = compression_level_to_bzip2(None);
assert_eq!(level, bzip2::Compression::default());
let level = compression_level_to_bzip2(Some(1));
assert_eq!(level, bzip2::Compression::fast());
let level = compression_level_to_bzip2(Some(9));
assert_eq!(level, bzip2::Compression::best());
let level = compression_level_to_bzip2(Some(4));
assert_eq!(level, bzip2::Compression::new(4));
}
#[test]
fn test_compression_level_to_xz() {
assert_eq!(compression_level_to_xz(None), 6);
assert_eq!(compression_level_to_xz(Some(6)), 6);
assert_eq!(compression_level_to_xz(Some(1)), 1);
assert_eq!(compression_level_to_xz(Some(9)), 9);
}
#[test]
fn test_compression_level_to_zstd() {
assert_eq!(compression_level_to_zstd(None), 3);
assert_eq!(compression_level_to_zstd(Some(6)), 3);
assert_eq!(compression_level_to_zstd(Some(1)), 1);
assert_eq!(compression_level_to_zstd(Some(2)), 2);
assert_eq!(compression_level_to_zstd(Some(7)), 10);
assert_eq!(compression_level_to_zstd(Some(8)), 15);
assert_eq!(compression_level_to_zstd(Some(9)), 19);
}
}