compression_codecs/flate/
params.rs

1use 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}