lance_encoding/encodings/physical/
constant.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright The Lance Authors
3
4//! Routines for compressing and decompressing constant-encoded data
5
6use crate::{
7    buffer::LanceBuffer,
8    compression::BlockDecompressor,
9    data::{ConstantDataBlock, DataBlock},
10};
11
12use lance_core::Result;
13
14/// A decompressor for constant-encoded data
15#[derive(Debug)]
16pub struct ConstantDecompressor {
17    scalar: LanceBuffer,
18}
19
20impl ConstantDecompressor {
21    pub fn new(scalar: LanceBuffer) -> Self {
22        Self {
23            scalar: scalar.into_borrowed(),
24        }
25    }
26}
27
28impl BlockDecompressor for ConstantDecompressor {
29    fn decompress(&self, _data: LanceBuffer, num_values: u64) -> Result<DataBlock> {
30        Ok(DataBlock::Constant(ConstantDataBlock {
31            data: self.scalar.try_clone().unwrap(),
32            num_values,
33        }))
34    }
35}