slim_config/grpc/
compression.rs1use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6use std::str::FromStr;
7use thiserror::Error;
8
9#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Default, JsonSchema)]
13pub enum CompressionType {
14 Gzip,
15 Zlib,
16 Deflate,
17 Snappy,
18 Zstd,
19 Lz4,
20 #[default]
21 None,
22 Empty,
23}
24
25impl CompressionType {
26 pub fn is_compressed(&self) -> bool {
28 *self != CompressionType::None && *self != CompressionType::Empty
29 }
30}
31
32impl FromStr for CompressionType {
34 type Err = CompressionError;
35
36 fn from_str(s: &str) -> Result<Self, Self::Err> {
37 match s {
38 "gzip" => Ok(CompressionType::Gzip),
39 "zlib" => Ok(CompressionType::Zlib),
40 "deflate" => Ok(CompressionType::Deflate),
41 "snappy" => Ok(CompressionType::Snappy),
42 "zstd" => Ok(CompressionType::Zstd),
43 "lz4" => Ok(CompressionType::Lz4),
44 "none" => Ok(CompressionType::None),
45 "" => Ok(CompressionType::Empty),
46 _ => Err(CompressionError::UnsupportedType(s.to_string())),
47 }
48 }
49}
50
51#[derive(Error, Debug)]
53pub enum CompressionError {
54 #[error("unsupported compression type {0}")]
56 UnsupportedType(String),
57}