use core::mem::MaybeUninit;
use super::{
IoBuf,
IoBufMut,
};
pub struct ArrayBuf<const N: usize> {
array: [MaybeUninit<u8>; N],
len: usize,
}
impl<const N: usize> Default for ArrayBuf<N> {
fn default() -> Self {
Self {
array: [MaybeUninit::uninit(); N],
len: 0,
}
}
}
impl<const N: usize> AsRef<[u8]> for ArrayBuf<N> {
fn as_ref(&self) -> &[u8] {
unsafe { &*(&self.array[..self.len] as *const [MaybeUninit<u8>] as *const [u8]) }
}
}
unsafe impl<const N: usize> IoBuf for ArrayBuf<N> {}
unsafe impl<const N: usize> IoBufMut for ArrayBuf<N> {
fn uninit_bytes(&mut self) -> &mut [MaybeUninit<u8>] {
&mut self.array
}
unsafe fn set_len(&mut self, new_len: usize) {
debug_assert!(new_len <= N);
self.len = new_len;
}
}