tools: add compression module

only contains a basic enum for the different compresssion methods

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak 2021-04-06 11:03:41 +02:00 committed by Thomas Lamprecht
parent f3c867a034
commit ea62611d8e
2 changed files with 40 additions and 0 deletions

View File

@ -22,6 +22,7 @@ pub mod apt;
pub mod async_io;
pub mod borrow;
pub mod cert;
pub mod compression;
pub mod daemon;
pub mod disks;
pub mod format;

39
src/tools/compression.rs Normal file
View File

@ -0,0 +1,39 @@
use anyhow::{bail, Error};
use hyper::header;
/// Possible Compression Methods, order determines preference (later is preferred)
#[derive(Eq, Ord, PartialEq, PartialOrd, Debug)]
pub enum CompressionMethod {
Deflate,
// Gzip,
// Brotli,
}
impl CompressionMethod {
pub fn content_encoding(&self) -> header::HeaderValue {
header::HeaderValue::from_static(self.extension())
}
pub fn extension(&self) -> &'static str {
match *self {
// CompressionMethod::Brotli => "br",
// CompressionMethod::Gzip => "gzip",
CompressionMethod::Deflate => "deflate",
}
}
}
impl std::str::FromStr for CompressionMethod {
type Err = Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
// "br" => Ok(CompressionMethod::Brotli),
// "gzip" => Ok(CompressionMethod::Gzip),
"deflate" => Ok(CompressionMethod::Deflate),
// http accept-encoding allows to give weights with ';q='
other if other.starts_with("deflate;q=") => Ok(CompressionMethod::Deflate),
_ => bail!("unknown compression format"),
}
}
}