uts_core/codec/imp/
std_io.rs1use 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}