variable_len_reader/synchronous/
mod.rs1pub mod reader;
2pub mod writer;
3
4pub trait VariableReadable {
5 type Error;
6
7 fn read_single(&mut self) -> Result<u8, Self::Error>;
8
9 fn read_more(&mut self, buf: &mut [u8]) -> Result<(), Self::Error> {
10 for i in 0..buf.len() {
11 buf[i] = self.read_single()?;
12 }
13 Ok(())
14 }
15
16 #[cfg(feature = "bytes")]
18 #[cfg_attr(docsrs, doc(cfg(feature = "bytes")))]
19 fn read_more_buf<B: bytes::BufMut>(&mut self, buf: &mut B) -> Result<(), Self::Error> {
20 use bytes::BufMut;
21 while buf.has_remaining_mut() {
22 let chunk = buf.chunk_mut();
23 let chunk = unsafe {&mut *core::ptr::slice_from_raw_parts_mut(chunk.as_mut_ptr(), chunk.len()) };
24 self.read_more(chunk)?;
25 }
26 Ok(())
27 }
28}
29
30pub trait VariableWritable {
31 type Error;
32
33 fn write_single(&mut self, byte: u8) -> Result<(), Self::Error>;
34
35 fn write_more(&mut self, buf: &[u8]) -> Result<(), Self::Error> {
36 for i in 0..buf.len() {
37 self.write_single(buf[i])?;
38 }
39 Ok(())
40 }
41
42 #[cfg(feature = "bytes")]
43 #[cfg_attr(docsrs, doc(cfg(feature = "bytes")))]
44 fn write_more_buf<B: bytes::Buf>(&mut self, buf: &mut B) -> Result<(), Self::Error> {
45 use bytes::Buf;
46 while buf.has_remaining() {
47 let chunk = buf.chunk();
48 self.write_more(chunk)?;
49 buf.advance(chunk.len());
50 }
51 Ok(())
52 }
53}