vortex_array/arrays/constant/
serde.rs

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