bitwarden_test/
repository.rs1use bitwarden_state::repository::{Repository, RepositoryError, RepositoryItem};
2
3pub struct MemoryRepository<V: RepositoryItem> {
8 store: std::sync::Mutex<std::collections::HashMap<String, V>>,
9}
10
11impl<V: RepositoryItem + Clone> Default for MemoryRepository<V> {
12 fn default() -> Self {
13 Self {
14 store: std::sync::Mutex::new(std::collections::HashMap::new()),
15 }
16 }
17}
18
19#[async_trait::async_trait]
20impl<V: RepositoryItem + Clone> Repository<V> for MemoryRepository<V> {
21 async fn get(&self, key: String) -> Result<Option<V>, RepositoryError> {
22 let store = self
23 .store
24 .lock()
25 .map_err(|e| RepositoryError::Internal(e.to_string()))?;
26 Ok(store.get(&key).cloned())
27 }
28
29 async fn list(&self) -> Result<Vec<V>, RepositoryError> {
30 let store = self
31 .store
32 .lock()
33 .map_err(|e| RepositoryError::Internal(e.to_string()))?;
34 Ok(store.values().cloned().collect())
35 }
36
37 async fn set(&self, key: String, value: V) -> Result<(), RepositoryError> {
38 let mut store = self
39 .store
40 .lock()
41 .map_err(|e| RepositoryError::Internal(e.to_string()))?;
42 store.insert(key, value);
43 Ok(())
44 }
45
46 async fn remove(&self, key: String) -> Result<(), RepositoryError> {
47 let mut store = self
48 .store
49 .lock()
50 .map_err(|e| RepositoryError::Internal(e.to_string()))?;
51 store.remove(&key);
52 Ok(())
53 }
54}