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::CloseReason> {
12 match self.db.status().close_reason {
13 None => Ok(()),
14 Some(reason) => Err(reason),
15 }
16 }
17
18 pub(super) async fn db_get<K: AsRef<[u8]> + Send, V>(
19 &self,
20 key: K,
21 deser: impl FnOnce(Bytes) -> Result<V, kv::DeserializationError>,
22 ) -> Result<Option<V>, StorageError> {
23 let read_opts = ReadOptions {
24 durability_filter: DurabilityLevel::Remote,
25 ..Default::default()
26 };
27 let value = self
28 .db
29 .get_with_options(key, &read_opts)
30 .await?
31 .map(deser)
32 .transpose()?;
33 Ok(value)
34 }
35}
36
37pub(super) async fn db_txn_get<K: AsRef<[u8]> + Send, V>(
38 txn: &DbTransaction,
39 key: K,
40 deser: impl FnOnce(Bytes) -> Result<V, kv::DeserializationError>,
41) -> Result<Option<V>, StorageError> {
42 let value = txn.get(key).await?.map(deser).transpose()?;
43 Ok(value)
44}