1use vortex_array::ExecutionCtx;
5use vortex_array::arrays::varbin::varbin_scalar;
6use vortex_array::scalar::Scalar;
7use vortex_array::vtable::OperationsVTable;
8use vortex_buffer::ByteBuffer;
9use vortex_error::VortexExpect;
10use vortex_error::VortexResult;
11
12use crate::FSST;
13use crate::FSSTArray;
14
15impl OperationsVTable<FSST> for FSST {
16 fn scalar_at(array: &FSSTArray, index: usize, _ctx: &mut ExecutionCtx) -> VortexResult<Scalar> {
17 let compressed = array.codes().scalar_at(index)?;
18 let binary_datum = compressed.as_binary().value().vortex_expect("non-null");
19
20 let decoded_buffer = ByteBuffer::from(array.decompressor().decompress(binary_datum));
21 Ok(varbin_scalar(decoded_buffer, array.dtype()))
22 }
23}