|
|
|
@@ -1,5 +1,5 @@ |
|
|
|
use arrow::{ |
|
|
|
array::{Array, AsArray, PrimitiveArray, StringArray}, |
|
|
|
array::{make_array, Array, AsArray, PrimitiveArray, StringArray}, |
|
|
|
datatypes::ArrowPrimitiveType, |
|
|
|
}; |
|
|
|
use eyre::ContextCompat; |
|
|
|
@@ -18,6 +18,18 @@ impl From<arrow::array::ArrayRef> for ArrowData { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl From<ArrowData> for arrow::array::ArrayData { |
|
|
|
fn from(value: ArrowData) -> Self { |
|
|
|
value.0.to_data() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl From<arrow::array::ArrayData> for ArrowData { |
|
|
|
fn from(value: arrow::array::ArrayData) -> Self { |
|
|
|
Self(make_array(value)) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl TryFrom<&ArrowData> for bool { |
|
|
|
type Error = eyre::Report; |
|
|
|
fn try_from(value: &ArrowData) -> Result<Self, Self::Error> { |
|
|
|
@@ -136,6 +148,18 @@ impl<'a> TryFrom<&'a ArrowData> for &'a [u8] { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl<'a> TryFrom<&'a ArrowData> for Vec<u8> { |
|
|
|
type Error = eyre::Report; |
|
|
|
fn try_from(value: &'a ArrowData) -> Result<Self, Self::Error> { |
|
|
|
let array: &PrimitiveArray<arrow::datatypes::UInt8Type> = |
|
|
|
value.as_primitive_opt().wrap_err("not a primitive array")?; |
|
|
|
if array.null_count() != 0 { |
|
|
|
eyre::bail!("array has nulls"); |
|
|
|
} |
|
|
|
Ok(array.values().to_vec()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
fn extract_single_primitive<T>(array: &PrimitiveArray<T>) -> Result<T::Native, eyre::Error> |
|
|
|
where |
|
|
|
T: ArrowPrimitiveType, |
|
|
|
|