compression_codecs/flate/
params.rs1use std::convert::TryInto;
2
3use compression_core::Level;
4
5#[derive(Debug, Clone)]
6pub struct FlateEncoderParams {
7 inner: flate2::Compression,
8}
9
10impl From<flate2::Compression> for FlateEncoderParams {
11 fn from(inner: flate2::Compression) -> Self {
12 Self { inner }
13 }
14}
15impl From<FlateEncoderParams> for flate2::Compression {
16 fn from(value: FlateEncoderParams) -> Self {
17 value.inner
18 }
19}
20
21impl From<Level> for FlateEncoderParams {
22 fn from(value: Level) -> Self {
23 let fastest = flate2::Compression::fast();
24 let best = flate2::Compression::best();
25 let none = flate2::Compression::none();
26
27 let inner = match value {
28 Level::Fastest => fastest,
29 Level::Best => best,
30 Level::Precise(quality) => flate2::Compression::new(
31 quality
32 .try_into()
33 .unwrap_or(0)
34 .clamp(none.level(), best.level()),
35 ),
36 _ => flate2::Compression::default(),
37 };
38 Self { inner }
39 }
40}