pub struct NonEmptyVecBuilder<T> {
first: Option<T>,
rest: Vec<T>,
}
impl<T> NonEmptyVecBuilder<T> {
pub fn new() -> Self {
Self {
first: None,
rest: Vec::new(),
}
}
pub fn push(&mut self, item: T) {
if self.first.is_none() {
self.first = Some(item);
} else {
self.rest.push(item);
}
}
pub fn finish(self) -> (T, Vec<T>) {
(self.first.unwrap(), self.rest)
}
}
impl<T> Extend<T> for NonEmptyVecBuilder<T> {
fn extend<Iter: IntoIterator<Item = T>>(&mut self, iter: Iter) {
let mut iter = iter.into_iter();
if self.first.is_none() {
self.first = iter.next();
}
self.rest.extend(iter);
}
}