rdf_fusion_encoding/sortable_term/
array.rs

1use crate::TermEncoding;
2use crate::encoding::EncodingArray;
3use crate::sortable_term::{SORTABLE_TERM_ENCODING, SortableTermEncoding};
4use datafusion::arrow::array::{Array, ArrayRef};
5use datafusion::common::exec_err;
6use datafusion::error::DataFusionError;
7
8/// Represents an Arrow array with a [SortableTermArray].
9#[derive(Clone)]
10pub struct SortableTermArray {
11    inner: ArrayRef,
12}
13
14impl SortableTermArray {}
15
16impl EncodingArray for SortableTermArray {
17    type Encoding = SortableTermEncoding;
18
19    fn encoding(&self) -> &Self::Encoding {
20        &SORTABLE_TERM_ENCODING
21    }
22
23    fn array(&self) -> &ArrayRef {
24        &self.inner
25    }
26
27    fn into_array(self) -> ArrayRef {
28        self.inner
29    }
30}
31
32impl TryFrom<ArrayRef> for SortableTermArray {
33    type Error = DataFusionError;
34
35    fn try_from(value: ArrayRef) -> Result<Self, Self::Error> {
36        if value.data_type() != &SORTABLE_TERM_ENCODING.data_type() {
37            return exec_err!(
38                "Expected array with SortableEncoded terms, got: {}",
39                value.data_type()
40            );
41        }
42        Ok(Self { inner: value })
43    }
44}