1use anyhow::{Context, Result};
13use ix_core::index::{IndexBackend, SearchHit, SyncStats};
14use ix_core::repo::IxchelRepo;
15
16fn backend_name(repo: &IxchelRepo) -> String {
17 repo.config.storage.backend.trim().to_ascii_lowercase()
18}
19
20pub fn sync(repo: &IxchelRepo) -> Result<SyncStats> {
21 match backend_name(repo).as_str() {
22 "surrealdb" => {
23 let mut index =
24 ix_storage_surrealdb::SurrealDbIndex::open(repo).context("open surrealdb index")?;
25 IndexBackend::sync(&mut index, repo).context("sync surrealdb index")
26 }
27 "helixdb" => anyhow::bail!(
28 "HelixDB backend is not available in this build. \
29 The crates.io version only supports SurrealDB because helix-db \
30 uses a git dependency. Build from source for HelixDB support: \
31 https://github.com/kevinmichaelchen/ixchel"
32 ),
33 backend => anyhow::bail!("Unsupported storage backend: {backend}"),
34 }
35}
36
37pub fn search(repo: &IxchelRepo, query: &str, limit: usize) -> Result<Vec<SearchHit>> {
38 match backend_name(repo).as_str() {
39 "surrealdb" => {
40 let index =
41 ix_storage_surrealdb::SurrealDbIndex::open(repo).context("open surrealdb index")?;
42 IndexBackend::search(&index, query, limit).context("search surrealdb index")
43 }
44 "helixdb" => anyhow::bail!(
45 "HelixDB backend is not available in this build. \
46 The crates.io version only supports SurrealDB because helix-db \
47 uses a git dependency. Build from source for HelixDB support: \
48 https://github.com/kevinmichaelchen/ixchel"
49 ),
50 backend => anyhow::bail!("Unsupported storage backend: {backend}"),
51 }
52}
53
54pub fn health_check(repo: &IxchelRepo) -> Result<()> {
55 match backend_name(repo).as_str() {
56 "surrealdb" => {
57 let index =
58 ix_storage_surrealdb::SurrealDbIndex::open(repo).context("open surrealdb index")?;
59 IndexBackend::health_check(&index).context("surrealdb health check")
60 }
61 "helixdb" => anyhow::bail!(
62 "HelixDB backend is not available in this build. \
63 The crates.io version only supports SurrealDB because helix-db \
64 uses a git dependency. Build from source for HelixDB support: \
65 https://github.com/kevinmichaelchen/ixchel"
66 ),
67 backend => anyhow::bail!("Unsupported storage backend: {backend}"),
68 }
69}