mod array;
mod ptr;
use alloc::{
string::String,
vec::Vec,
};
use core::mem::MaybeUninit;
pub use array::ArrayBuf;
pub use ptr::{
PtrBuf,
PtrBufMut,
};
pub unsafe trait IoBuf: AsRef<[u8]> {}
pub unsafe trait IoBufMut: IoBuf {
fn uninit_bytes(&mut self) -> &mut [MaybeUninit<u8>];
unsafe fn set_len(&mut self, new_len: usize);
}
unsafe impl IoBuf for &'static [u8] {}
unsafe impl IoBuf for &'static str {}
unsafe impl<const N: usize> IoBuf for [u8; N] {}
unsafe impl<const N: usize> IoBuf for &'static [u8; N] {}
unsafe impl IoBuf for Vec<u8> {}
unsafe impl IoBufMut for Vec<u8> {
fn uninit_bytes(&mut self) -> &mut [MaybeUninit<u8>] {
unsafe {
core::slice::from_raw_parts_mut(
self.as_mut_ptr() as *mut MaybeUninit<u8>,
self.capacity(),
)
}
}
unsafe fn set_len(&mut self, new_len: usize) {
self.set_len(new_len);
}
}
unsafe impl IoBuf for String {}
unsafe impl IoBuf for lx::Mmap {}