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;
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}