vortex_array/arrays/extension/
serde.rs1use vortex_dtype::DType;
2use vortex_error::{VortexResult, vortex_bail};
3
4use crate::arrays::{ExtensionArray, ExtensionEncoding};
5use crate::serde::ArrayParts;
6use crate::vtable::SerdeVTable;
7use crate::{Array, ArrayChildVisitor, ArrayContext, ArrayRef, ArrayVisitorImpl, EmptyMetadata};
8
9impl ArrayVisitorImpl for ExtensionArray {
10 fn _children(&self, visitor: &mut dyn ArrayChildVisitor) {
11 visitor.visit_child("storage", self.storage())
12 }
13
14 fn _metadata(&self) -> EmptyMetadata {
15 EmptyMetadata
16 }
17}
18
19impl SerdeVTable<&ExtensionArray> for ExtensionEncoding {
20 fn decode(
21 &self,
22 parts: &ArrayParts,
23 ctx: &ArrayContext,
24 dtype: DType,
25 len: usize,
26 ) -> VortexResult<ArrayRef> {
27 let DType::Extension(ext_dtype) = dtype else {
28 vortex_bail!("Not an extension DType");
29 };
30 let storage = parts
31 .child(0)
32 .decode(ctx, ext_dtype.storage_dtype().clone(), len)?;
33 Ok(ExtensionArray::new(ext_dtype, storage).into_array())
34 }
35}