use std::collections::HashMap;
use std::sync::Mutex;
use blitz_traits::platform::{OriginKey, StorageError, StorageProvider};
#[derive(Default)]
pub struct MemoryStorage {
origins: Mutex<HashMap<String, HashMap<String, String>>>,
}
impl MemoryStorage {
pub fn new() -> Self {
Self::default()
}
pub fn origin_count(&self) -> usize {
self.origins.lock().unwrap().len()
}
}
impl StorageProvider for MemoryStorage {
fn get(&self, origin: &OriginKey, key: &str) -> Option<String> {
self.origins
.lock()
.unwrap()
.get(origin.as_str())?
.get(key)
.cloned()
}
fn set(&self, origin: &OriginKey, key: &str, value: &str) -> Result<(), StorageError> {
self.origins
.lock()
.unwrap()
.entry(origin.as_str().to_owned())
.or_default()
.insert(key.to_owned(), value.to_owned());
Ok(())
}
fn remove(&self, origin: &OriginKey, key: &str) {
if let Some(entries) = self.origins.lock().unwrap().get_mut(origin.as_str()) {
entries.remove(key);
}
}
fn clear(&self, origin: &OriginKey) {
self.origins.lock().unwrap().remove(origin.as_str());
}
}