bitwarden_test/
setting.rs1use std::sync::{Arc, Mutex};
2
3use bitwarden_state::{Persist, Setting, SettingTrait, SettingsError};
4
5pub struct MemorySetting<T> {
10 value: Mutex<Option<T>>,
11}
12
13impl<T: Clone + Persist> MemorySetting<T> {
14 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}