Skip to main content

async_memorydb/
lib.rs

1pub use async_kvdb::*;
2use async_lock::RwLock;
3use std::collections::HashMap;
4
5#[derive(Default)]
6pub struct MenoryDb {
7    mem: RwLock<HashMap<Key, Value>>,
8}
9impl MenoryDb {
10    pub fn new(mem: HashMap<Key, Value>) -> Self {
11        Self { mem: RwLock::new(mem) }
12    }
13    pub async fn is_empty(&self) -> bool {
14        self.mem.read().await.is_empty()
15    }
16}
17
18#[async_trait]
19impl Kvdb for MenoryDb {
20    async fn scan_keys(&self, filter: &Filter) -> Vec<Key> {
21        let mem = self.mem.read().await;
22        mem.keys().filter(|k| filter(k)).map(Clone::clone).collect()
23    }
24    async fn get(&self, key: Key) -> Option<Value> {
25        self.mem.read().await.get(&key).cloned()
26    }
27    async fn get_many(&self, keys: Vec<Key>) -> HashMap<Key, Value> {
28        let mem = self.mem.read().await;
29        mem.iter()
30            .filter_map(|(k, v)| if keys.contains(k) { Some((k.clone(), v.clone())) } else { None })
31            .collect()
32    }
33    async fn set(&self, key: Key, value: Value) {
34        self.mem.write().await.insert(key, value);
35    }
36    async fn set_many(&self, data: HashMap<Key, Value>) {
37        let mut mem = self.mem.write().await;
38        mem.extend(data);
39    }
40    async fn delete(&self, key: Key) {
41        self.mem.write().await.remove(&key);
42    }
43    async fn delete_many(&self, keys: Vec<Key>) {
44        let mut mem = self.mem.write().await;
45        mem.retain(|k, _| !keys.contains(k));
46    }
47    async fn delete_all(&self) {
48        let mut mem = self.mem.write().await;
49        *mem = HashMap::new();
50    }
51}