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 =
24 IntCompressor::compress(&days.to_primitive().narrow()?, false, MAX_CASCADE - 1, &[])?;
25 let seconds = IntCompressor::compress(
26 &seconds.to_primitive().narrow()?,
27 false,
28 MAX_CASCADE - 1,
29 &[],
30 )?;
31 let subseconds = IntCompressor::compress(
32 &subseconds.to_primitive().narrow()?,
33 false,
34 MAX_CASCADE - 1,
35 &[],
36 )?;
37
38 Ok(DateTimePartsArray::try_new(dtype, days, seconds, subseconds)?.into_array())
39}