1use crate::{Secret, SecretKey, SecretStore};
2use async_trait::async_trait;
3use origin_domain::Result;
4use std::collections::HashMap;
5use tokio::sync::RwLock;
6
7#[derive(Debug, Default)]
12pub struct MemorySecretStore {
13 entries: RwLock<HashMap<SecretKey, Secret>>,
14}
15
16impl MemorySecretStore {
17 pub fn new() -> Self {
18 Self::default()
19 }
20}
21
22#[async_trait]
23impl SecretStore for MemorySecretStore {
24 async fn get(&self, key: &SecretKey) -> Result<Option<Secret>> {
25 Ok(self.entries.read().await.get(key).cloned())
26 }
27
28 async fn set(&self, key: &SecretKey, value: Secret) -> Result<()> {
29 self.entries.write().await.insert(key.clone(), value);
30 Ok(())
31 }
32
33 async fn delete(&self, key: &SecretKey) -> Result<()> {
34 self.entries.write().await.remove(key);
35 Ok(())
36 }
37}