Skip to main content

rw_builder/
base64.rs

1use crate::{Result, RwBuilder};
2
3/// Builder for Base64 encoding/decoding
4#[derive(Debug)]
5pub struct Base64Builder<B> {
6    /// Inner builder
7    builder: B,
8}
9
10impl<B: RwBuilder> Base64Builder<B> {
11    /// Creates a new base64 builder wrapper
12    pub const fn new(builder: B) -> Self {
13        Self { builder }
14    }
15}
16
17impl<B: RwBuilder> RwBuilder for Base64Builder<B> {
18    type Reader = base64::read::DecoderReader<'static, base64::engine::GeneralPurpose, B::Reader>;
19    type Writer = base64::write::EncoderWriter<'static, base64::engine::GeneralPurpose, B::Writer>;
20
21    fn reader(&self) -> Result<Self::Reader> {
22        Ok(base64::read::DecoderReader::new(
23            self.builder.reader()?,
24            &base64::engine::general_purpose::STANDARD,
25        ))
26    }
27
28    fn writer(&self) -> Result<Self::Writer> {
29        Ok(base64::write::EncoderWriter::new(
30            self.builder.writer()?,
31            &base64::engine::general_purpose::STANDARD,
32        ))
33    }
34}