//! See [`NonEmptyVec`]. /// A [`Vec`] that is guaranteed to at least contain one element. pub struct NonEmptyVec { first: T, rest: Vec, } impl NonEmptyVec { #[inline] pub fn new(first: T) -> Self { NonEmptyVec { first, rest: Vec::new() } } #[inline] pub fn last_mut(&mut self) -> &mut T { self.rest.last_mut().unwrap_or(&mut self.first) } #[inline] pub fn pop(&mut self) -> Option { self.rest.pop() } #[inline] pub fn push(&mut self, value: T) { self.rest.push(value) } #[inline] pub fn len(&self) -> usize { 1 + self.rest.len() } #[inline] pub fn into_last(mut self) -> T { self.rest.pop().unwrap_or(self.first) } }