vortex_array/arrays/constant/
serde.rs1use 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}