vortex_btrblocks/
temporal.rs1use vortex_array::arrays::TemporalArray;
7use vortex_array::{ArrayRef, IntoArray, ToCanonical};
8use vortex_datetime_parts::{DateTimePartsArray, TemporalParts, split_temporal};
9use vortex_error::VortexResult;
10
11use crate::integer::IntCompressor;
12use crate::{Compressor, MAX_CASCADE};
13
14pub fn compress_temporal(array: TemporalArray) -> VortexResult<ArrayRef> {
16 let dtype = array.dtype().clone();
17 let TemporalParts {
18 days,
19 seconds,
20 subseconds,
21 } = split_temporal(array)?;
22
23 let days = IntCompressor::compress(
24 &days.to_primitive()?.downcast()?,
25 false,
26 MAX_CASCADE - 1,
27 &[],
28 )?;
29 let seconds = IntCompressor::compress(
30 &seconds.to_primitive()?.downcast()?,
31 false,
32 MAX_CASCADE - 1,
33 &[],
34 )?;
35 let subseconds = IntCompressor::compress(
36 &subseconds.to_primitive()?.downcast()?,
37 false,
38 MAX_CASCADE - 1,
39 &[],
40 )?;
41
42 Ok(DateTimePartsArray::try_new(dtype, days, seconds, subseconds)?.into_array())
43}