Skip to main content

uts_core/codec/imp/
std_io.rs

1use crate::codec::*;
2use std::{
3    io::{Read, Write},
4    slice,
5};
6
7pub struct Writer<W: Write>(pub W);
8pub struct Reader<R: Read>(pub R);
9
10impl<W: Write> Encoder for Writer<W> {
11    fn encode_byte(&mut self, byte: u8) -> Result<(), EncodeError> {
12        self.write_all(slice::from_ref(&byte))?;
13        Ok(())
14    }
15
16    #[inline]
17    fn write_all(&mut self, buf: impl AsRef<[u8]>) -> Result<(), EncodeError> {
18        self.0.write_all(buf.as_ref())?;
19        Ok(())
20    }
21}
22
23impl<R: Read> Decoder for Reader<R> {
24    fn decode_byte(&mut self) -> Result<u8, DecodeError> {
25        let mut byte = [0];
26        self.read_exact(&mut byte)?;
27        Ok(byte[0])
28    }
29
30    #[inline]
31    fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), DecodeError> {
32        self.0.read_exact(buf)?;
33        Ok(())
34    }
35}