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::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}