compression_codecs/bzip2/
params.rs

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