vortex_array/vtable/
metadata.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use std::fmt::Formatter;

use vortex_error::VortexResult;

use crate::encoding::Encoding;
use crate::{Array, DeserializeMetadata};

pub trait MetadataVTable<Array> {
    fn validate_metadata(&self, metadata: Option<&[u8]>) -> VortexResult<()>;

    fn display_metadata(&self, array: &Array, f: &mut Formatter<'_>) -> std::fmt::Result;
}

impl<E: Encoding> MetadataVTable<Array> for E {
    fn validate_metadata(&self, metadata: Option<&[u8]>) -> VortexResult<()> {
        E::Metadata::deserialize(metadata).map(|_| ())
    }

    fn display_metadata(&self, array: &Array, f: &mut Formatter<'_>) -> std::fmt::Result {
        <E::Metadata as DeserializeMetadata>::format(array.metadata_bytes(), f)
    }
}