Skip to main content

vortex_array/arrays/union/compute/
slice.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use 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}