vortex_array/arrays/struct_/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::Struct;
13use crate::arrays::StructArray;
14use crate::arrays::slice::SliceReduce;
15use crate::arrays::struct_::StructArrayExt;
16
17impl SliceReduce for Struct {
18 fn slice(array: ArrayView<'_, Self>, range: Range<usize>) -> VortexResult<Option<ArrayRef>> {
19 let fields: Vec<_> = array
20 .iter_unmasked_fields()
21 .map(|field| field.slice(range.clone()))
22 .try_collect()?;
23
24 Ok(Some(
26 unsafe {
27 StructArray::new_unchecked(
28 fields,
29 array.struct_fields().clone(),
30 range.len(),
31 array.validity()?.slice(range)?,
32 )
33 }
34 .into_array(),
35 ))
36 }
37}