~ knotless Search/
↑↓ move↵ open⇧↵ all results

johnandersen777.bsky.social/asyncai

0
0
main
26 lines · 626 B Raw History
use std::collections::HashMap;

use async_trait::async_trait;
use tokio::sync::Mutex;

#[async_trait]
pub trait KvStore: Send + Sync {
    async fn get(&self, key: &str) -> Option<String>;
    async fn set(&self, key: &str, value: String);
}

#[derive(Debug, Default)]
pub struct MemoryKvStore {
    inner: Mutex<HashMap<String, String>>,
}

#[async_trait]
impl KvStore for MemoryKvStore {
    async fn get(&self, key: &str) -> Option<String> {
        self.inner.lock().await.get(key).cloned()
    }

    async fn set(&self, key: &str, value: String) {
        self.inner.lock().await.insert(key.to_string(), value);
    }
}