serde_arrow 0.14.0

Convert sequences of Rust objects to Arrow arrays and back again
Documentation
use serde_json::json;

use crate::{internal::utils::array_ext::bytes_view, utils::Item};

use super::utils::Test;

#[test]
fn non_nullable() {
    let items = &[
        Item(String::from("foo")),
        Item(String::from("bar")),
        Item(String::from("a long string")),
        Item(String::from("an even longer string")),
        Item(String::from("baz")),
    ];

    Test::new()
        .skip_arrow2()
        .with_schema(json!([
            {"name": "item", "data_type": "Utf8View"},
        ]))
        .serialize(items)
        .deserialize(items)
        .also(|test| {
            let array = test.arrays.marrow.as_ref().unwrap().first().unwrap();
            let marrow::array::Array::Utf8View(array) = array else {
                panic!("expected utf8 array");
            };
            assert_eq!(
                array.data,
                &[
                    bytes_view::pack_inline(b"foo"),
                    bytes_view::pack_inline(b"bar"),
                    bytes_view::pack_extern(b"a long string", 0, 0),
                    bytes_view::pack_extern(b"an even longer string", 0, b"a long string".len()),
                    bytes_view::pack_inline(b"baz"),
                ],
            );
            assert_eq!(array.buffers[0], b"a long stringan even longer string");
        });
}

#[test]
fn nullable() {
    let items = &[
        Item(Some(String::from("foo"))),
        Item(None),
        Item(None),
        Item(Some(String::from("an even longer string"))),
        Item(Some(String::from("baz"))),
    ];

    Test::new()
        .skip_arrow2()
        .with_schema(json!([
            {"name": "item", "data_type": "Utf8View", "nullable": true},
        ]))
        .serialize(items)
        .deserialize(items)
        .also(|test| {
            let array = test.arrays.marrow.as_ref().unwrap().first().unwrap();
            let marrow::array::Array::Utf8View(array) = array else {
                panic!("expected utf8 array");
            };
            assert_eq!(
                array.data,
                &[
                    bytes_view::pack_inline(b"foo"),
                    bytes_view::pack_inline(b""),
                    bytes_view::pack_inline(b""),
                    bytes_view::pack_extern(b"an even longer string", 0, 0),
                    bytes_view::pack_inline(b"baz"),
                ],
            );

            assert_eq!(array.buffers[0], b"an even longer string");
        });
}