use vortex_error::VortexResult;
use crate::ArrayRef;
use crate::IntoArray;
use crate::arrays::ListViewArray;
use crate::arrays::ListViewVTable;
use crate::builtins::ArrayBuiltins;
use crate::dtype::DType;
use crate::scalar_fn::fns::cast::CastReduce;
use crate::vtable::ValidityHelper;
impl CastReduce for ListViewVTable {
fn cast(array: &ListViewArray, dtype: &DType) -> VortexResult<Option<ArrayRef>> {
let Some(target_element_type) = dtype.as_list_element_opt() else {
return Ok(None);
};
let new_elements = array.elements().cast((**target_element_type).clone())?;
let validity = array
.validity()
.clone()
.cast_nullability(dtype.nullability(), array.len())?;
Ok(Some(
unsafe {
ListViewArray::new_unchecked(
new_elements,
array.offsets().clone(),
array.sizes().clone(),
validity,
)
.with_zero_copy_to_list(array.is_zero_copy_to_list())
}
.into_array(),
))
}
}