[pbs-devel] [PATCH proxmox-backup v2 1/5] tools: add compression module

Thomas Lamprecht t.lamprecht at proxmox.com
Fri Apr 2 14:07:09 CEST 2021


On 01.04.21 16:11, Dominik Csapak wrote:
> only contains a basic enum for the different compresssion methods
> 
> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
> ---
>  src/tools.rs             |  1 +
>  src/tools/compression.rs | 37 +++++++++++++++++++++++++++++++++++++
>  2 files changed, 38 insertions(+)
>  create mode 100644 src/tools/compression.rs
> 
> diff --git a/src/tools.rs b/src/tools.rs
> index 7e3bff7b..cd1415ec 100644
> --- a/src/tools.rs
> +++ b/src/tools.rs
> @@ -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;
> diff --git a/src/tools/compression.rs b/src/tools/compression.rs
> new file mode 100644
> index 00000000..fe15e8fc
> --- /dev/null
> +++ b/src/tools/compression.rs
> @@ -0,0 +1,37 @@
> +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",

I'd for now comment those out, as else we have a Some(_) in most match arms meaning that
when we actually implement those there's a higher chance that we forget to add the match
to such an arm and rust won't notice due to the "catch all".

> +        }
> +    }
> +}
> +
> +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::Brotli),

above should be CompressionMethod::Gzip

> +            "deflate" => Ok(CompressionMethod::Deflate),
> +            _ => bail!("unknown compression format"),
> +        }
> +    }
> +}
> 






More information about the pbs-devel mailing list