Skip to main content

bitwarden_test/
setting.rs

1use std::sync::{Arc, Mutex};
2
3use bitwarden_state::{Persist, Setting, SettingTrait, SettingsError};
4
5/// A simple in-memory setting backend. The data is only stored in memory and will not persist
6/// beyond the lifetime of the backend instance.
7///
8/// Primary use case is for unit and integration tests.
9pub struct MemorySetting<T> {
10    value: Mutex<Option<T>>,
11}
12
13impl<T: Clone + Persist> MemorySetting<T> {
14    /// Create a setting handle backed by a fresh in-memory store.
15    pub fn create() -> Setting<T> {
16        Setting::new(Arc::new(Self {
17            value: Mutex::new(None),
18        }))
19    }
20}
21
22#[async_trait::async_trait]
23impl<T: Clone + Persist> SettingTrait<T> for MemorySetting<T> {
24    async fn get(&self) -> Result<Option<T>, SettingsError> {
25        Ok(self.value.lock().expect("Mutex is not poisoned").clone())
26    }
27
28    async fn set(&self, value: T) -> Result<(), SettingsError> {
29        *self.value.lock().expect("Mutex is not poisoned") = Some(value);
30        Ok(())
31    }
32
33    async fn remove(&self) -> Result<(), SettingsError> {
34        *self.value.lock().expect("Mutex is not poisoned") = None;
35        Ok(())
36    }
37}