use arrow_array::Array;
use arrow_array::builder::BooleanBuilder;
use arrow_data::ArrayData;
use arrow_schema::ArrowError;
use crate::reader::ArrayDecoder;
use crate::reader::tape::{Tape, TapeElement};
#[derive(Default)]
pub struct BooleanArrayDecoder {}
impl ArrayDecoder for BooleanArrayDecoder {
fn decode(&mut self, tape: &Tape<'_>, pos: &[u32]) -> Result<ArrayData, ArrowError> {
let mut builder = BooleanBuilder::with_capacity(pos.len());
for p in pos {
match tape.get(*p) {
TapeElement::Null => builder.append_null(),
TapeElement::True => builder.append_value(true),
TapeElement::False => builder.append_value(false),
_ => return Err(tape.error(*p, "boolean")),
}
}
Ok(builder.finish().into_data())
}
}