pub mod slice;
#[cfg(feature = "alloc")]
pub mod vec;
use crate::Result;
use core::ops::Range;
pub trait InputSource {
fn remaining(&self) -> usize;
fn peek_byte(&mut self) -> Result<u8>;
fn read_byte(&mut self) -> Result<u8>;
fn peek_bytes_exact<const N: usize>(&mut self) -> Result<&[u8; N]>;
fn read_bytes_exact<const N: usize>(&mut self) -> Result<&[u8; N]>;
fn peek_byte_slice_exact(&mut self, count: usize) -> Result<&[u8]>;
fn read_byte_slice_exact(&mut self, count: usize) -> Result<&[u8]>;
fn read_bytes_into_exact(&mut self, dest: &mut [u8]) -> Result<()>;
}
pub trait OutputTarget {
fn remaining(&self) -> usize;
fn write_byte(&mut self, byte: u8) -> Result<()>;
fn write_bytes_exact(&mut self, bytes: &[u8]) -> Result<()>;
fn write_bytes_into_reserved_exact(&mut self, reservation: &mut Reservation, bytes: &[u8]) -> Result<()>;
fn reserve_space(&mut self, count: usize) -> Result<Reservation>;
}
#[derive(Debug)]
#[must_use]
pub struct Reservation(Range<usize>);
impl Reservation {
fn range(&self) -> Range<usize> {
self.0.clone()
}
}