use crate::{Error, Length};
use std::io::{Read, Write};
pub fn read_u8<T>(readable: &mut T) -> Result<u8, Error>
where
T: ?Sized + Read,
{
let mut buf = [0; 1];
match readable.read(&mut buf) {
Err(e) => Err(e.into()),
Ok(0) => Err(Error::UnterminatedBytes),
Ok(1) => Ok(buf[0]),
_ => unreachable!(),
}
}
pub unsafe fn write_u8<T>(writeable: &mut T, byte: u8) -> Result<(), Error>
where
T: ?Sized + Write,
{
let buf = [byte];
match writeable.write(&buf) {
Err(e) => Err(e.into()),
Ok(1) => Ok(()),
_ => unimplemented!(),
}
}
pub unsafe fn parse_id_length<R, W>(readable: &mut R, writeable: &mut W) -> Result<Length, Error>
where
R: ?Sized + Read,
W: ?Sized + Write,
{
let _ = crate::identifier_ref::parse_id(readable, writeable)?;
crate::length::parse_length(readable, writeable)
}