use std::sync::Arc;
use arrow_array::ArrayRef as ArrowArrayRef;
use arrow_array::BooleanArray as ArrowBooleanArray;
use vortex_error::VortexResult;
use crate::ArrayRef;
use crate::ExecutionCtx;
use crate::arrays::BoolArray;
use crate::arrays::bool::BoolArrayExt;
use crate::arrow::null_buffer::to_null_buffer;
pub fn canonical_bool_to_arrow(array: &BoolArray) -> VortexResult<ArrowArrayRef> {
Ok(Arc::new(ArrowBooleanArray::new(
array.to_bit_buffer().into(),
to_null_buffer(array.validity_mask()?),
)))
}
pub(super) fn to_arrow_bool(
array: ArrayRef,
ctx: &mut ExecutionCtx,
) -> VortexResult<ArrowArrayRef> {
let bool_array = array.execute::<BoolArray>(ctx)?;
canonical_bool_to_arrow(&bool_array)
}