pub trait ArenaStorage {
fn len(&self) -> usize;
fn is_empty(&self) -> bool;
fn as_slice(&self) -> &[u8];
fn as_mut_slice(&mut self) -> &mut [u8];
}
impl<const N: usize> ArenaStorage for [u8; N] {
#[inline]
fn len(&self) -> usize {
N
}
#[inline]
fn is_empty(&self) -> bool {
self.len() == 0
}
#[inline]
fn as_slice(&self) -> &[u8] {
self
}
#[inline]
fn as_mut_slice(&mut self) -> &mut [u8] {
self
}
}
impl ArenaStorage for [u8] {
#[inline]
fn len(&self) -> usize {
(*self).len()
}
#[inline]
fn is_empty(&self) -> bool {
self.len() == 0
}
#[inline]
fn as_slice(&self) -> &[u8] {
self
}
#[inline]
fn as_mut_slice(&mut self) -> &mut [u8] {
self
}
}
#[cfg(feature = "alloc")]
impl ArenaStorage for alloc::boxed::Box<[u8]> {
#[inline]
fn len(&self) -> usize {
(**self).len()
}
#[inline]
fn is_empty(&self) -> bool {
self.len() == 0
}
#[inline]
fn as_slice(&self) -> &[u8] {
self
}
#[inline]
fn as_mut_slice(&mut self) -> &mut [u8] {
self
}
}