1use crate::{Result, RwBuilder};
2
3#[derive(Debug)]
6#[must_use]
7pub struct ZstdBuilder<B>
8where
9 B: RwBuilder,
10{
11 builder: B,
13 level: i32,
15}
16
17impl<B> ZstdBuilder<B>
18where
19 B: RwBuilder,
20{
21 pub const fn new(builder: B, level: i32) -> Self {
23 Self { builder, level }
24 }
25}
26
27impl<B> RwBuilder for ZstdBuilder<B>
28where
29 B: RwBuilder,
30{
31 type Reader = zstd::stream::read::Decoder<'static, std::io::BufReader<B::Reader>>;
32
33 fn reader(&self) -> Result<Self::Reader> {
34 let reader = self.builder.reader()?;
35 zstd::stream::read::Decoder::new(reader).map_err(Into::into)
36 }
37
38 type Writer = zstd::stream::write::Encoder<'static, B::Writer>;
39
40 fn writer(&self) -> Result<Self::Writer> {
41 let writer = self.builder.writer()?;
42 zstd::stream::write::Encoder::new(writer, self.level).map_err(Into::into)
43 }
44}