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;
16
17impl SliceReduce for Union {
18 fn slice(array: ArrayView<'_, Self>, range: Range<usize>) -> VortexResult<Option<ArrayRef>> {
19 let type_ids = array.type_ids().slice(range.clone())?;
20 let children: Vec<ArrayRef> = array
21 .iter_children()
22 .map(|child| child.slice(range.clone()))
23 .try_collect()?;
24
25 Ok(Some(
26 UnionArray::try_new(type_ids, array.variants().clone(), children)?.into_array(),
27 ))
28 }
29}