use managed::ManagedSlice; /// Error value indicating insufficient capacity. #[derive(Debug, Clone, Copy, Eq, Ord, PartialEq, PartialOrd)] pub struct CapacityError(pub Element); /// Wraps a ManagedSlice in a vec-like interface. pub struct ManagedVec<'a, 'b, T> { buf: &'b mut ManagedSlice<'a, T>, len: usize, } impl<'a, 'b, T> ManagedVec<'a, 'b, T> { pub fn new_with_idx(buf: &'b mut ManagedSlice<'a, T>, len: usize) -> Self { ManagedVec { buf, len } } pub fn push(&mut self, value: T) -> Result<(), CapacityError> { if self.len < self.buf.len() { self.buf[self.len] = value; self.len += 1; Ok(()) } else { match &mut self.buf { ManagedSlice::Borrowed(_) => Err(CapacityError(value)), #[cfg(feature = "alloc")] ManagedSlice::Owned(buf) => { buf.push(value); Ok(()) } } } } #[cfg(feature = "trace-pkt")] pub fn as_slice<'c: 'b>(&'c self) -> &'b [T] { &self.buf[..self.len] } }