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}
14
15#[async_trait]
16impl Kvdb for MenoryDb {
17 async fn scan_keys(&self, filter: &Filter) -> Vec<Key> {
18 let mem = self.mem.read().await;
19 mem.keys().filter(|k| filter(k)).map(Clone::clone).collect()
20 }
21 async fn get(&self, key: Key) -> Option<Value> {
22 self.mem.read().await.get(&key).cloned()
23 }
24 async fn get_many(&self, keys: Vec<Key>) -> HashMap<Key, Value> {
25 let mem = self.mem.read().await;
26 mem.iter()
27 .filter_map(|(k, v)| if keys.contains(k) { Some((k.clone(), v.clone())) } else { None })
28 .collect()
29 }
30 async fn set(&self, key: Key, value: Value) {
31 self.mem.write().await.insert(key, value);
32 }
33 async fn set_many(&self, data: HashMap<Key, Value>) {
34 let mut mem = self.mem.write().await;
35 mem.extend(data);
36 }
37 async fn delete(&self, key: Key) {
38 self.mem.write().await.remove(&key);
39 }
40 async fn delete_many(&self, keys: Vec<Key>) {
41 let mut mem = self.mem.write().await;
42 mem.retain(|k, _| !keys.contains(k));
43 }
44 async fn delete_all(&self) {
45 let mut mem = self.mem.write().await;
46 *mem = HashMap::new();
47 }
48}