polars_arrow/legacy/array/
default_arrays.rs

1use crate::array::{BinaryArray, BooleanArray, PrimitiveArray, Utf8Array};
2use crate::bitmap::Bitmap;
3use crate::buffer::Buffer;
4use crate::datatypes::ArrowDataType;
5use crate::offset::OffsetsBuffer;
6use crate::types::NativeType;
7
8pub trait FromData<T> {
9    fn from_data_default(values: T, validity: Option<Bitmap>) -> Self;
10}
11
12impl FromData<Bitmap> for BooleanArray {
13    fn from_data_default(values: Bitmap, validity: Option<Bitmap>) -> BooleanArray {
14        BooleanArray::new(ArrowDataType::Boolean, values, validity)
15    }
16}
17
18impl<T: NativeType> FromData<Buffer<T>> for PrimitiveArray<T> {
19    fn from_data_default(values: Buffer<T>, validity: Option<Bitmap>) -> Self {
20        let dt = T::PRIMITIVE;
21        PrimitiveArray::new(dt.into(), values, validity)
22    }
23}
24
25pub trait FromDataUtf8 {
26    /// # Safety
27    /// `values` buffer must contain valid utf8 between every `offset`
28    unsafe fn from_data_unchecked_default(
29        offsets: Buffer<i64>,
30        values: Buffer<u8>,
31        validity: Option<Bitmap>,
32    ) -> Self;
33}
34
35impl FromDataUtf8 for Utf8Array<i64> {
36    unsafe fn from_data_unchecked_default(
37        offsets: Buffer<i64>,
38        values: Buffer<u8>,
39        validity: Option<Bitmap>,
40    ) -> Self {
41        let offsets = OffsetsBuffer::new_unchecked(offsets);
42        Utf8Array::new_unchecked(ArrowDataType::LargeUtf8, offsets, values, validity)
43    }
44}
45
46pub trait FromDataBinary {
47    /// # Safety
48    /// `values` buffer must contain valid utf8 between every `offset`
49    unsafe fn from_data_unchecked_default(
50        offsets: Buffer<i64>,
51        values: Buffer<u8>,
52        validity: Option<Bitmap>,
53    ) -> Self;
54}
55
56impl FromDataBinary for BinaryArray<i64> {
57    unsafe fn from_data_unchecked_default(
58        offsets: Buffer<i64>,
59        values: Buffer<u8>,
60        validity: Option<Bitmap>,
61    ) -> Self {
62        let offsets = OffsetsBuffer::new_unchecked(offsets);
63        BinaryArray::new(ArrowDataType::LargeBinary, offsets, values, validity)
64    }
65}