vortex_array/
normalize.rs1use itertools::Itertools;
5use vortex_error::VortexResult;
6use vortex_error::vortex_bail;
7use vortex_session::registry::Id;
8
9use crate::Array;
10use crate::ArrayRef;
11use crate::ArrayVisitor;
12use crate::session::ArrayRegistry;
13
14pub struct NormalizeOptions<'a> {
16 pub allowed: &'a ArrayRegistry,
19 pub operation: Operation,
21}
22
23pub enum Operation {
25 Error,
26 }
28
29impl dyn Array + '_ {
30 pub fn normalize(self: ArrayRef, options: &mut NormalizeOptions) -> VortexResult<ArrayRef> {
35 let array_ids = options.allowed.ids().collect_vec();
36 self.normalize_with_error(&array_ids)?;
37 Ok(self)
39 }
40
41 fn normalize_with_error(self: &ArrayRef, allowed: &[Id]) -> VortexResult<()> {
42 if !allowed.contains(&self.encoding_id()) {
43 vortex_bail!(AssertionFailed: "normalize forbids encoding ({})", self.encoding_id())
44 }
45
46 for child in ArrayVisitor::children(self) {
47 let child: ArrayRef = child;
48 child.normalize_with_error(allowed)?
49 }
50 Ok(())
51 }
52}