vortex_array/arrays/union/compute/
slice.rs1use std::ops::Range;
5
6use itertools::Itertools;
7use vortex_error::VortexResult;
8
9use crate::ArrayRef;
10use crate::IntoArray;
11use crate::array::ArrayView;
12use crate::arrays::Union;
13use crate::arrays::UnionArray;
14use crate::arrays::slice::SliceReduce;
15use crate::arrays::union::UnionArrayExt;
16use crate::arrays::union::UnionArraySlotsExt;
17
18impl SliceReduce for Union {
19 fn slice(array: ArrayView<'_, Self>, range: Range<usize>) -> VortexResult<Option<ArrayRef>> {
20 let type_ids = array.type_ids().slice(range.clone())?;
21 let children: Vec<ArrayRef> = array
22 .iter_children()
23 .map(|child| child.slice(range.clone()))
24 .try_collect()?;
25
26 Ok(Some(
27 UnionArray::try_new(type_ids, array.variants().clone(), children)?.into_array(),
28 ))
29 }
30}