vortex_array/arrays/constant/
serde.rs

1use vortex_buffer::ByteBuffer;
2use vortex_dtype::DType;
3use vortex_error::{VortexResult, vortex_bail};
4use vortex_scalar::{Scalar, ScalarValue};
5
6use crate::EmptyMetadata;
7use crate::arrays::{ConstantArray, ConstantEncoding, ConstantVTable};
8use crate::serde::ArrayChildren;
9use crate::vtable::SerdeVTable;
10
11impl SerdeVTable<ConstantVTable> for ConstantVTable {
12    type Metadata = EmptyMetadata;
13
14    fn metadata(_array: &ConstantArray) -> VortexResult<Option<Self::Metadata>> {
15        Ok(Some(EmptyMetadata))
16    }
17
18    fn build(
19        _encoding: &ConstantEncoding,
20        dtype: &DType,
21        len: usize,
22        _metadata: &Self::Metadata,
23        buffers: &[ByteBuffer],
24        _children: &dyn ArrayChildren,
25    ) -> VortexResult<ConstantArray> {
26        if buffers.len() != 1 {
27            vortex_bail!("Expected 1 buffer, got {}", buffers.len());
28        }
29        let sv = ScalarValue::from_protobytes(&buffers[0])?;
30        let scalar = Scalar::new(dtype.clone(), sv);
31        Ok(ConstantArray::new(scalar, len))
32    }
33}