Skip to main content

lxdb_engine/
dataset_ext.rs

1use lxdb_core::ids::TokenId;
2use lxdb_format::{AdjacencyRecord, RelationRecord, TokenRecord};
3use lxdb_storage::BinaryDataset;
4
5use crate::{
6    AdjacencyRecordIter, BinaryTokenIter, DatasetQuery, EngineError, RecordIter,
7    RelationRecordIter, TokenRecordIter, relation::outgoing_relations,
8};
9
10pub trait BinaryDatasetExt {
11    fn tokens(&self) -> TokenRecordIter<'_>;
12
13    fn relations(&self) -> RelationRecordIter<'_>;
14
15    fn adjacency(&self) -> AdjacencyRecordIter<'_>;
16
17    fn resolved_tokens(&self) -> BinaryTokenIter<'_>;
18
19    fn outgoing(&self, token_id: TokenId) -> Result<RelationRecordIter<'_>, EngineError>;
20
21    fn query(&self) -> DatasetQuery<'_>;
22}
23
24impl BinaryDatasetExt for BinaryDataset {
25    fn tokens(&self) -> TokenRecordIter<'_> {
26        RecordIter::<TokenRecord>::new(self.token_records())
27    }
28
29    fn relations(&self) -> RelationRecordIter<'_> {
30        RecordIter::<RelationRecord>::new(self.relation_records())
31    }
32
33    fn adjacency(&self) -> AdjacencyRecordIter<'_> {
34        RecordIter::<AdjacencyRecord>::new(self.adjacency_records())
35    }
36
37    fn resolved_tokens(&self) -> BinaryTokenIter<'_> {
38        BinaryTokenIter::new(self.tokens(), self.token_string_table())
39    }
40
41    fn outgoing(&self, token_id: TokenId) -> Result<RelationRecordIter<'_>, EngineError> {
42        outgoing_relations(self, token_id)
43    }
44
45    fn query(&self) -> DatasetQuery<'_> {
46        DatasetQuery::new(self)
47    }
48}