typed_arrow/bridge/
null_type.rs1#[cfg(feature = "views")]
4use arrow_array::Array;
5use arrow_array::{NullArray, builder::NullBuilder};
6use arrow_schema::DataType;
7
8use super::ArrowBinding;
9#[cfg(feature = "views")]
10use super::ArrowBindingView;
11
12#[derive(Debug, Clone)]
17pub struct Null;
18
19impl ArrowBinding for Null {
20 type Builder = NullBuilder;
21 type Array = NullArray;
22 const NULLABLE: bool = true;
23 fn data_type() -> DataType {
24 DataType::Null
25 }
26 fn new_builder(_capacity: usize) -> Self::Builder {
27 NullBuilder::new()
28 }
29 fn append_value(b: &mut Self::Builder, _v: &Self) {
30 b.append_null();
31 }
32 fn append_null(b: &mut Self::Builder) {
33 b.append_null();
34 }
35 fn finish(mut b: Self::Builder) -> Self::Array {
36 b.finish()
37 }
38}
39
40#[cfg(feature = "views")]
41impl ArrowBindingView for Null {
42 type Array = NullArray;
43 type View<'a> = Null;
44
45 fn get_view(
46 array: &Self::Array,
47 index: usize,
48 ) -> Result<Self::View<'_>, crate::schema::ViewAccessError> {
49 if index >= array.len() {
50 return Err(crate::schema::ViewAccessError::OutOfBounds {
51 index,
52 len: array.len(),
53 field_name: None,
54 });
55 }
56 Ok(Null)
58 }
59}