arrow_convert 0.12.1

Convert between nested rust types and Arrow with arrow
Documentation
use arrow_schema::DataType;
use tinystr::TinyAsciiStr;

use crate::deserialize::ArrowDeserialize;
use crate::field::ArrowField;
use crate::serialize::ArrowSerialize;

use arrow_array::{builder::FixedSizeBinaryBuilder, FixedSizeBinaryArray};

impl<const N: usize> ArrowField for TinyAsciiStr<N> {
    type Type = Self;

    fn data_type() -> DataType {
        DataType::FixedSizeBinary(N as i32)
    }
}

impl<const N: usize> ArrowSerialize for TinyAsciiStr<N> {
    type ArrayBuilderType = FixedSizeBinaryBuilder;

    fn new_array() -> Self::ArrayBuilderType {
        FixedSizeBinaryBuilder::new(N as i32)
    }

    fn arrow_serialize(v: &Self::Type, array: &mut Self::ArrayBuilderType) -> Result<(), arrow_schema::ArrowError> {
        array.append_value(v.as_bytes())?;
        Ok(())
    }
}

impl<const N: usize> ArrowDeserialize for TinyAsciiStr<N> {
    type ArrayType = FixedSizeBinaryArray;

    fn arrow_deserialize(v: Option<&[u8]>) -> Option<Self> {
        v.and_then(|bytes| TinyAsciiStr::try_from_utf8(bytes).ok())
    }
}