Skip to main content

khive_db/backend/
capability_factories.rs

1use std::sync::Arc;
2
3use khive_storage::{
4    SparseStore, SparseStoreFactory, StorageCapability, StorageResult, TextSearch,
5    TextSearchFactory, VectorStore, VectorStoreFactory,
6};
7
8use super::core_stores::map_open_error;
9use super::StorageBackend;
10
11impl VectorStoreFactory for StorageBackend {
12    fn open(
13        &self,
14        model_key: &str,
15        embedding_model: &str,
16        dimensions: usize,
17        namespace: &str,
18    ) -> StorageResult<Arc<dyn VectorStore>> {
19        self.vectors_for_namespace(model_key, embedding_model, dimensions, namespace)
20            .map_err(|error| {
21                map_open_error(error, StorageCapability::Vectors, "vectors_for_namespace")
22            })
23    }
24}
25
26impl SparseStoreFactory for StorageBackend {
27    fn open(&self, model_key: &str, namespace: &str) -> StorageResult<Arc<dyn SparseStore>> {
28        self.sparse_for_namespace(model_key, namespace)
29            .map_err(|error| {
30                map_open_error(error, StorageCapability::Sparse, "sparse_for_namespace")
31            })
32    }
33}
34
35impl TextSearchFactory for StorageBackend {
36    fn open(&self, table_key: &str, tokenizer: &str) -> StorageResult<Arc<dyn TextSearch>> {
37        self.text_with_tokenizer(table_key, tokenizer)
38            .map_err(|error| map_open_error(error, StorageCapability::Text, "text_with_tokenizer"))
39    }
40}
41
42#[cfg(test)]
43mod tests;