use crate::utils::Sealed;
#[allow(
private_bounds,
reason = "It is forbidden for users to implement this trait"
)]
pub trait FixedBuffer: Sealed {
fn as_ptr(&self) -> *const u8;
fn as_bytes(&self) -> &[u8] {
unsafe { std::slice::from_raw_parts(self.as_ptr(), self.len_u32() as _) }
}
fn len_u32(&self) -> u32;
fn fixed_index(&self) -> u16;
fn is_fixed(&self) -> bool;
}
pub trait FixedBufferMut: FixedBuffer {
fn as_mut_ptr(&mut self) -> *mut u8;
fn as_bytes_mut(&mut self) -> &mut [u8] {
unsafe { std::slice::from_raw_parts_mut(self.as_mut_ptr(), self.len_u32() as _) }
}
}