use std::fmt;
use std::str::FromStr;
use serde::Deserialize;
#[derive(Debug, Deserialize, PartialEq, Clone, Default)]
pub enum CompressionType {
Gzip,
Zlib,
Deflate,
Snappy,
Zstd,
Lz4,
#[default]
None,
Empty,
}
impl CompressionType {
pub fn is_compressed(&self) -> bool {
*self != CompressionType::None && *self != CompressionType::Empty
}
}
impl FromStr for CompressionType {
type Err = CompressionError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"gzip" => Ok(CompressionType::Gzip),
"zlib" => Ok(CompressionType::Zlib),
"deflate" => Ok(CompressionType::Deflate),
"snappy" => Ok(CompressionType::Snappy),
"zstd" => Ok(CompressionType::Zstd),
"lz4" => Ok(CompressionType::Lz4),
"none" => Ok(CompressionType::None),
"" => Ok(CompressionType::Empty),
_ => Err(CompressionError::UnsupportedType(s.to_string())),
}
}
}
#[derive(Debug)]
pub enum CompressionError {
UnsupportedType(String),
}
impl fmt::Display for CompressionError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
CompressionError::UnsupportedType(t) => {
write!(f, "unsupported compression type {:?}", t)
}
}
}
}