use std::io;
use crate::error::Error;
mod ioread;
pub use ioread::*;
mod sliceread;
pub use sliceread::*;
mod private {
pub trait Sealed {}
}
pub trait Read<'de>: private::Sealed {
fn peek(&mut self) -> Option<u8>;
fn next(&mut self) -> Option<u8>;
fn read_const_bytes<const N: usize>(&mut self) -> Option<[u8; N]> {
let mut buf = [0u8; N];
match self.read_exact(&mut buf) {
Ok(_) => Some(buf),
Err(_) => None,
}
}
fn peek_bytes(&mut self, n: usize) -> Option<&[u8]>;
fn read_bytes(&mut self, n: usize) -> Option<Vec<u8>> {
let mut buf = vec![0u8; n];
match self.read_exact(&mut buf) {
Ok(_) => Some(buf),
Err(_) => None,
}
}
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), io::Error>;
fn forward_read_bytes<V>(&mut self, len: usize, visitor: V) -> Result<V::Value, Error>
where
V: serde::de::Visitor<'de>;
fn forward_read_str<V>(&mut self, len: usize, visitor: V) -> Result<V::Value, Error>
where
V: serde::de::Visitor<'de>;
}