Skip to main content

origin_secrets/
memory.rs

1use crate::{Secret, SecretKey, SecretStore};
2use async_trait::async_trait;
3use origin_domain::Result;
4use std::collections::HashMap;
5use tokio::sync::RwLock;
6
7/// In-memory secret store for tests and for the headless/CI path.
8///
9/// Never use it in a shipped application: the values live in plain process memory
10/// and are gone on restart.
11#[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}