vortex_array/arrays/listview/compute/
cast.rs1use vortex_dtype::DType;
5use vortex_error::VortexResult;
6
7use crate::arrays::{ListViewArray, ListViewVTable};
8use crate::compute::{self, CastKernel, CastKernelAdapter};
9use crate::vtable::ValidityHelper;
10use crate::{ArrayRef, register_kernel};
11
12impl CastKernel for ListViewVTable {
13 fn cast(&self, array: &ListViewArray, dtype: &DType) -> VortexResult<Option<ArrayRef>> {
14 let Some(target_element_type) = dtype.as_list_element_opt() else {
16 return Ok(None);
17 };
18
19 let new_elements = compute::cast(array.elements(), target_element_type)?;
21 let validity = array
22 .validity()
23 .clone()
24 .cast_nullability(dtype.nullability(), array.len())?;
25
26 Ok(Some(
28 unsafe {
29 ListViewArray::new_unchecked(
30 new_elements,
31 array.offsets().clone(),
32 array.sizes().clone(),
33 validity,
34 )
35 }
36 .to_array(),
37 ))
38 }
39}
40
41register_kernel!(CastKernelAdapter(ListViewVTable).lift());