use std::io::BufRead;
use chisel_decoders::{ascii::AsciiDecoder, utf8::Utf8Decoder};
#[derive(Copy, Clone)]
pub enum Encoding {
Utf8,
Ascii,
}
impl Default for Encoding {
fn default() -> Self {
Self::Utf8
}
}
#[derive(Default)]
pub(crate) struct DecoderSelector {}
impl DecoderSelector {
pub fn default_decoder<'a, Buffer: BufRead>(
&'a self,
buffer: &'a mut Buffer,
) -> Box<dyn Iterator<Item = char> + 'a> {
Box::new(Utf8Decoder::new(buffer))
}
pub fn new_decoder<'a, Buffer: BufRead>(
&'a self,
buffer: &'a mut Buffer,
encoding: Encoding,
) -> Box<dyn Iterator<Item = char> + 'a> {
match encoding {
Encoding::Ascii => Box::new(AsciiDecoder::new(buffer)),
Encoding::Utf8 => Box::new(Utf8Decoder::new(buffer)),
}
}
}