1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use std::any::Any;

use vortex_dtype::DType;
use vortex_error::VortexResult;

use crate::array::NullArray;
use crate::builders::ArrayBuilder;
use crate::{ArrayData, IntoArrayData};

pub struct NullBuilder {
    length: usize,
}

impl Default for NullBuilder {
    fn default() -> Self {
        Self::new()
    }
}

impl NullBuilder {
    pub fn new() -> Self {
        Self { length: 0 }
    }
}

impl ArrayBuilder for NullBuilder {
    fn as_any(&self) -> &dyn Any {
        self
    }

    fn as_any_mut(&mut self) -> &mut dyn Any {
        self
    }

    fn dtype(&self) -> &DType {
        &DType::Null
    }

    fn len(&self) -> usize {
        self.length
    }

    fn append_zeros(&mut self, n: usize) {
        self.length += n;
    }

    fn append_nulls(&mut self, n: usize) {
        self.length += n;
    }

    fn finish(&mut self) -> VortexResult<ArrayData> {
        Ok(NullArray::new(self.length).into_array())
    }
}