Skip to main content

polars_arrow/legacy/array/
default_arrays.rs

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