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