pyo3_arrow/ffi/to_python/
chunked.rs1use arrow_array::ArrayRef;
2use arrow_schema::{ArrowError, FieldRef};
3
4pub trait ArrayReader: Iterator<Item = Result<ArrayRef, ArrowError>> {
8 fn field(&self) -> FieldRef;
13}
14
15impl<R: ArrayReader + ?Sized> ArrayReader for Box<R> {
16 fn field(&self) -> FieldRef {
17 self.as_ref().field()
18 }
19}
20
21pub struct ArrayIterator<I>
23where
24 I: IntoIterator<Item = Result<ArrayRef, ArrowError>>,
25{
26 inner: I::IntoIter,
27 inner_field: FieldRef,
28}
29
30impl<I> ArrayIterator<I>
31where
32 I: IntoIterator<Item = Result<ArrayRef, ArrowError>>,
33{
34 pub fn new(iter: I, field: FieldRef) -> Self {
38 Self {
39 inner: iter.into_iter(),
40 inner_field: field,
41 }
42 }
43}
44
45impl<I> Iterator for ArrayIterator<I>
46where
47 I: IntoIterator<Item = Result<ArrayRef, ArrowError>>,
48{
49 type Item = I::Item;
50
51 fn next(&mut self) -> Option<Self::Item> {
52 self.inner.next()
53 }
54
55 fn size_hint(&self) -> (usize, Option<usize>) {
56 self.inner.size_hint()
57 }
58}
59
60impl<I> ArrayReader for ArrayIterator<I>
61where
62 I: IntoIterator<Item = Result<ArrayRef, ArrowError>>,
63{
64 fn field(&self) -> FieldRef {
65 self.inner_field.clone()
66 }
67}