sqlitegraph_cli/
client.rs1use sqlitegraph::{SqliteGraphBackend, NativeGraphBackend, GraphBackend, SqliteGraph};
7
8pub enum BackendClient {
10 Sqlite(SqliteGraphBackend),
11 Native(NativeGraphBackend),
12 Dynamic(Box<dyn GraphBackend>),
14}
15
16impl BackendClient {
17 pub fn new(backend: SqliteGraphBackend) -> Self {
18 Self::Sqlite(backend)
19 }
20
21 pub fn new_native(backend: NativeGraphBackend) -> Self {
22 Self::Native(backend)
23 }
24
25 pub fn from_dynamic(backend: Box<dyn GraphBackend>) -> Self {
27 Self::Dynamic(backend)
28 }
29
30 pub fn backend(&self) -> &dyn GraphBackend {
32 match self {
33 BackendClient::Sqlite(b) => b,
34 BackendClient::Native(b) => b,
35 BackendClient::Dynamic(b) => b.as_ref(),
36 }
37 }
38
39 pub fn graph(&self) -> Option<&SqliteGraph> {
41 match self {
42 BackendClient::Sqlite(b) => Some(b.graph()),
43 BackendClient::Native(_) => None,
44 BackendClient::Dynamic(_) => None,
45 }
46 }
47
48 pub fn entity_ids(&self) -> Result<Option<Vec<i64>>, sqlitegraph::SqliteGraphError> {
50 match self {
51 BackendClient::Sqlite(b) => Ok(Some(b.entity_ids()?)),
52 BackendClient::Native(_) => Ok(None),
53 BackendClient::Dynamic(_) => Ok(None),
54 }
55 }
56
57 pub fn backend_type(&self) -> &str {
59 match self {
60 BackendClient::Sqlite(_) => "sqlite",
61 BackendClient::Native(_) => "native",
62 BackendClient::Dynamic(_) => "dynamic",
63 }
64 }
65
66 #[cfg(feature = "native-v2")]
68 pub fn get_wal_metrics(&self) -> Option<sqlitegraph::backend::native::v2::wal::WALManagerMetrics> {
69 match self {
70 BackendClient::Native(b) => b.get_wal_metrics(),
71 BackendClient::Dynamic(_) => None, BackendClient::Sqlite(_) => None,
73 }
74 }
75
76 #[cfg(feature = "native-v2")]
78 pub fn get_active_transaction_count(&self) -> Option<usize> {
79 match self {
80 BackendClient::Native(b) => b.get_active_transaction_count(),
81 BackendClient::Dynamic(_) => None,
82 BackendClient::Sqlite(_) => None,
83 }
84 }
85}