Skip to main content

s2_lite/backend/
store.rs

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}