1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#[derive(PartialEq, PartialOrd, Copy, Clone, Debug)]
pub enum CompressionLevel {
  Level0,
  Level1,
  Level2,
  Level3,
  Level4,
}

impl CompressionLevel {
  pub fn from_compression_level(i: u8) -> Option<Self> {
    match i {
      0 => Some(CompressionLevel::Level0),
      1 => Some(CompressionLevel::Level1),
      2 => Some(CompressionLevel::Level2),
      3 => Some(CompressionLevel::Level3),
      4 => Some(CompressionLevel::Level4),
      _ => None,
    }
  }
  pub fn buffer_size(self) -> usize {
    1 << self.compression_factor()
  }
  pub fn compression_factor(self) -> u8 {
    10 + self.compression_level()
  }
  pub fn compression_level(self) -> u8 {
    match self {
      CompressionLevel::Level0 => 0,
      CompressionLevel::Level1 => 1,
      CompressionLevel::Level2 => 2,
      CompressionLevel::Level3 => 3,
      CompressionLevel::Level4 => 4,
    }
  }
}