vortex_array/arrays/dict/vtable/
operations.rs1use vortex_error::VortexExpect;
5use vortex_error::VortexResult;
6
7use super::Dict;
8use crate::ExecutionCtx;
9use crate::array::ArrayView;
10use crate::array::OperationsVTable;
11use crate::arrays::dict::DictArraySlotsExt;
12use crate::scalar::Scalar;
13
14impl OperationsVTable<Dict> for Dict {
15 fn scalar_at(
16 array: ArrayView<'_, Dict>,
17 index: usize,
18 _ctx: &mut ExecutionCtx,
19 ) -> VortexResult<Scalar> {
20 let Some(dict_index) = array
21 .codes()
22 .scalar_at(index)?
23 .as_primitive()
24 .as_::<usize>()
25 else {
26 return Ok(Scalar::null(array.dtype().clone()));
27 };
28
29 Ok(array
30 .values()
31 .scalar_at(dict_index)?
32 .cast(array.dtype())
33 .vortex_expect("Array dtype will only differ by nullability"))
34 }
35}