rabia_persistence/
in_memory.rs1use async_trait::async_trait;
2use parking_lot::RwLock;
3use rabia_core::{persistence::PersistenceLayer, Result};
4use std::sync::Arc;
5
6#[derive(Debug, Clone)]
12pub struct InMemoryPersistence {
13 state: Arc<RwLock<Option<Vec<u8>>>>,
14}
15
16impl InMemoryPersistence {
17 pub fn new() -> Self {
19 Self {
20 state: Arc::new(RwLock::new(None)),
21 }
22 }
23}
24
25impl Default for InMemoryPersistence {
26 fn default() -> Self {
27 Self::new()
28 }
29}
30
31#[async_trait]
32impl PersistenceLayer for InMemoryPersistence {
33 async fn save_state(&self, state: &[u8]) -> Result<()> {
34 let mut current_state = self.state.write();
35 *current_state = Some(state.to_vec());
36 Ok(())
37 }
38
39 async fn load_state(&self) -> Result<Option<Vec<u8>>> {
40 let state = self.state.read();
41 Ok(state.clone())
42 }
43}