1use bytes::Bytes;
2use slatedb::{
3 DbTransaction,
4 config::{DurabilityLevel, ReadOptions},
5};
6
7use super::Backend;
8use crate::backend::{error::StorageError, kv};
9
10impl Backend {
11 pub fn db_status(&self) -> Result<(), slatedb::Error> {
12 self.db.status()
13 }
14
15 pub(super) async fn db_get<K: AsRef<[u8]> + Send, V>(
16 &self,
17 key: K,
18 deser: impl FnOnce(Bytes) -> Result<V, kv::DeserializationError>,
19 ) -> Result<Option<V>, StorageError> {
20 static READ_OPTS: ReadOptions = ReadOptions {
21 durability_filter: DurabilityLevel::Remote,
22 dirty: false,
23 cache_blocks: true,
24 };
25 let value = self
26 .db
27 .get_with_options(key, &READ_OPTS)
28 .await?
29 .map(deser)
30 .transpose()?;
31 Ok(value)
32 }
33}
34
35pub(super) async fn db_txn_get<K: AsRef<[u8]> + Send, V>(
36 txn: &DbTransaction,
37 key: K,
38 deser: impl FnOnce(Bytes) -> Result<V, kv::DeserializationError>,
39) -> Result<Option<V>, StorageError> {
40 static READ_OPTS: ReadOptions = ReadOptions {
41 durability_filter: DurabilityLevel::Memory,
42 dirty: false,
43 cache_blocks: true,
44 };
45 let value = txn
46 .get_with_options(key, &READ_OPTS)
47 .await?
48 .map(deser)
49 .transpose()?;
50 Ok(value)
51}