arrow-rayon 0.0.3

Use parallel iterators for Apache Arrow with rayon
Documentation
use arrow_array::types::{Decimal128Type, Decimal256Type};
use arrow_array::{Decimal128Array, Decimal256Array};
use arrow_buffer::i256;
use rayon::iter::ParallelIterator;

use crate::parallel_primitive_array::{ParallelPrimitiveArray, ParallelPrimitiveArrayRef};

pub type ParallelDecimal128Array = ParallelPrimitiveArray<Decimal128Type>;
pub type ParallelDecimal128ArrayRef<'data> = ParallelPrimitiveArrayRef<'data, Decimal128Type>;
pub type ParallelDecimal256Array = ParallelPrimitiveArray<Decimal256Type>;
pub type ParallelDecimal256ArrayRef<'data> = ParallelPrimitiveArrayRef<'data, Decimal256Type>;

pub trait Decimal128ArrayRefParallelIterator<'data> {
    type Iter: ParallelIterator<Item = Option<i128>>;

    fn par_iter(&'data self) -> Self::Iter;
}

impl<'data> Decimal128ArrayRefParallelIterator<'data> for Decimal128Array {
    type Iter = ParallelDecimal128ArrayRef<'data>;

    fn par_iter(&'data self) -> Self::Iter {
        ParallelDecimal128ArrayRef::new(self)
    }
}

pub trait Decimal256ArrayRefParallelIterator<'data> {
    type Iter: ParallelIterator<Item = Option<i256>>;

    fn par_iter(&'data self) -> Self::Iter;
}

impl<'data> Decimal256ArrayRefParallelIterator<'data> for Decimal256Array {
    type Iter = ParallelDecimal256ArrayRef<'data>;

    fn par_iter(&'data self) -> Self::Iter {
        ParallelDecimal256ArrayRef::new(self)
    }
}