From 4687b9a110272ece785dc266e2709240f802aa14 Mon Sep 17 00:00:00 2001 From: Opulence Chuks Date: Sun, 23 Aug 2026 19:13:18 +0100 Subject: [PATCH] feat(cache): implement MemoryCache with DashMap --- crates/core/Cargo.toml | 1 + crates/core/src/cache/memory.rs | 55 +++++++++++++++++++++++++++++++++ crates/core/src/cache/mod.rs | 1 + 3 files changed, 57 insertions(+) create mode 100644 crates/core/src/cache/memory.rs diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 613d23f0..f6aeda92 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -44,6 +44,7 @@ wasmparser = { workspace = true } redb = { workspace = true } directories = { workspace = true } flate2 = { workspace = true } +dashmap = "6" # Logging tracing = { workspace = true } diff --git a/crates/core/src/cache/memory.rs b/crates/core/src/cache/memory.rs new file mode 100644 index 00000000..007e5fb0 --- /dev/null +++ b/crates/core/src/cache/memory.rs @@ -0,0 +1,55 @@ +use dashmap::DashMap; +use std::hash::Hash; +use std::sync::Arc; + +pub trait CacheProvider { + fn get(&self, key: &K) -> Option>; + fn insert(&self, key: K, value: V); + fn remove(&self, key: &K) -> Option>; + fn clear(&self); +} + +pub struct MemoryCache { + store: DashMap>, +} + +impl MemoryCache +where + K: Eq + Hash + Clone, +{ + pub fn new() -> Self { + Self { + store: DashMap::new(), + } + } +} + +impl Default for MemoryCache +where + K: Eq + Hash + Clone, +{ + fn default() -> Self { + Self::new() + } +} + +impl CacheProvider for MemoryCache +where + K: Eq + Hash + Clone, +{ + fn get(&self, key: &K) -> Option> { + self.store.get(key).map(|v| Arc::clone(v.value())) + } + + fn insert(&self, key: K, value: V) { + self.store.insert(key, Arc::new(value)); + } + + fn remove(&self, key: &K) -> Option> { + self.store.remove(key).map(|(_, v)| v) + } + + fn clear(&self) { + self.store.clear(); + } +} diff --git a/crates/core/src/cache/mod.rs b/crates/core/src/cache/mod.rs index 55c88cbf..a87046e1 100644 --- a/crates/core/src/cache/mod.rs +++ b/crates/core/src/cache/mod.rs @@ -1 +1,2 @@ +pub mod memory; pub mod store;