use super::{Builder, MapBuilder, Pushable};
pub struct VectorBuilder<'a> {
pub(crate) builder: &'a mut Builder,
pub(crate) start: Option<usize>,
}
impl<'a> VectorBuilder<'a> {
#[inline]
pub fn push<P: Pushable>(&mut self, p: P) {
self.builder.push(p);
}
#[inline]
pub fn start_vector(&mut self) -> VectorBuilder<'_> {
let start = Some(self.builder.values.len());
VectorBuilder { builder: self.builder, start }
}
#[inline]
pub fn start_map(&mut self) -> MapBuilder<'_> {
let start = Some(self.builder.values.len());
MapBuilder { builder: self.builder, start }
}
#[inline]
pub fn end_vector(self) {}
}
impl<'a> Drop for VectorBuilder<'a> {
#[inline]
fn drop(&mut self) {
self.builder.end_map_or_vector(false, self.start);
}
}