vortex_array/arrow/
iter.rs1use arrow_array::ffi_stream;
5use vortex_dtype::DType;
6use vortex_dtype::arrow::FromArrowType;
7use vortex_error::VortexError;
8use vortex_error::VortexResult;
9
10use crate::ArrayRef;
11use crate::arrow::FromArrowArray;
12use crate::iter::ArrayIterator;
13
14pub struct ArrowArrayStreamAdapter {
16 stream: ffi_stream::ArrowArrayStreamReader,
17 dtype: DType,
18}
19
20impl ArrowArrayStreamAdapter {
21 pub fn new(stream: ffi_stream::ArrowArrayStreamReader, dtype: DType) -> Self {
22 Self { stream, dtype }
23 }
24}
25
26impl ArrayIterator for ArrowArrayStreamAdapter {
27 fn dtype(&self) -> &DType {
28 &self.dtype
29 }
30}
31
32impl Iterator for ArrowArrayStreamAdapter {
33 type Item = VortexResult<ArrayRef>;
34
35 fn next(&mut self) -> Option<Self::Item> {
36 let batch = self.stream.next()?;
37
38 Some(batch.map_err(VortexError::from).map(|b| {
39 debug_assert_eq!(&self.dtype, &DType::from_arrow(b.schema()));
40 ArrayRef::from_arrow(b, false)
41 }))
42 }
43}