aboutsummaryrefslogtreecommitdiff
path: root/src/storage/in_memory.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/storage/in_memory.rs')
-rw-r--r--src/storage/in_memory.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/storage/in_memory.rs b/src/storage/in_memory.rs
index 00eedab..fb6e599 100644
--- a/src/storage/in_memory.rs
+++ b/src/storage/in_memory.rs
@@ -9,6 +9,22 @@ use tokio::sync::Notify;
/// It means that when a user disconnects, its data are lost.
/// It's intended only for basic debugging, do not use it for advanced tests...
+#[derive(Debug, Default)]
+pub struct MemDb(tokio::sync::Mutex<HashMap<String, Arc<MemBuilder>>>);
+impl MemDb {
+ pub fn new() -> Self {
+ Self(tokio::sync::Mutex::new(HashMap::new()))
+ }
+
+ pub async fn builder(&self, username: &str) -> Arc<MemBuilder> {
+ let mut global_storage = self.0.lock().await;
+ global_storage
+ .entry(username.to_string())
+ .or_insert(MemBuilder::new(username))
+ .clone()
+ }
+}
+
#[derive(Debug, Clone)]
enum InternalData {
Tombstone,