typed-arrow 0.7.0

Compile-time Arrow schemas for Rust.
Documentation
use arrow_schema::{DataType, TimeUnit};
use half::f16;
use typed_arrow::{
    Date32, Date64, Duration, Microsecond, Millisecond, Nanosecond, Second, Time32, Time64,
    arrow_schema, bridge::ArrowBinding,
};

#[test]
fn float16_datatype() {
    assert_eq!(<f16 as ArrowBinding>::data_type(), DataType::Float16);
    let mut b = <f16 as ArrowBinding>::new_builder(2);
    <f16 as ArrowBinding>::append_value(&mut b, &f16::from_f32(1.5));
    <f16 as ArrowBinding>::append_null(&mut b);
    let a = <f16 as ArrowBinding>::finish(b);
    assert_eq!(a.len(), 2);
}

#[test]
fn date32_date64_datatype() {
    assert_eq!(<Date32 as ArrowBinding>::data_type(), DataType::Date32);
    let mut b32 = <Date32 as ArrowBinding>::new_builder(1);
    <Date32 as ArrowBinding>::append_value(&mut b32, &Date32::new(0));
    let _ = <Date32 as ArrowBinding>::finish(b32);

    assert_eq!(<Date64 as ArrowBinding>::data_type(), DataType::Date64);
    let mut b64 = <Date64 as ArrowBinding>::new_builder(1);
    <Date64 as ArrowBinding>::append_value(&mut b64, &Date64::new(0));
    let _ = <Date64 as ArrowBinding>::finish(b64);
}

#[test]
fn time32_time64_datatype() {
    type T32S = Time32<Second>;
    type T32Ms = Time32<Millisecond>;
    type T64Us = Time64<Microsecond>;
    type T64Ns = Time64<Nanosecond>;

    assert_eq!(
        <T32S as ArrowBinding>::data_type(),
        DataType::Time32(TimeUnit::Second)
    );
    assert_eq!(
        <T32Ms as ArrowBinding>::data_type(),
        DataType::Time32(TimeUnit::Millisecond)
    );
    assert_eq!(
        <T64Us as ArrowBinding>::data_type(),
        DataType::Time64(TimeUnit::Microsecond)
    );
    assert_eq!(
        <T64Ns as ArrowBinding>::data_type(),
        DataType::Time64(TimeUnit::Nanosecond)
    );

    let mut b = <T32S as ArrowBinding>::new_builder(1);
    let v = Time32::<Second>::new(0);
    <T32S as ArrowBinding>::append_value(&mut b, &v);
    let _ = <T32S as ArrowBinding>::finish(b);
}

#[test]
fn duration_datatype() {
    type Dms = Duration<Millisecond>;
    assert_eq!(
        <Dms as ArrowBinding>::data_type(),
        DataType::Duration(TimeUnit::Millisecond)
    );
    let mut b = <Dms as ArrowBinding>::new_builder(1);
    <Dms as ArrowBinding>::append_value(&mut b, &Duration::<Millisecond>::new(1));
    let _ = <Dms as ArrowBinding>::finish(b);
}