Skip to main content

macp_storage/storage/
memory.rs

1use crate::log_store::LogEntry;
2use macp_core::session::Session;
3use std::io;
4
5use super::StorageBackend;
6
7pub struct MemoryBackend;
8
9#[async_trait::async_trait]
10impl StorageBackend for MemoryBackend {
11    async fn save_session(&self, _session: &Session) -> io::Result<()> {
12        Ok(())
13    }
14
15    async fn load_session(&self, _session_id: &str) -> io::Result<Option<Session>> {
16        Ok(None)
17    }
18
19    async fn load_all_sessions(&self) -> io::Result<Vec<Session>> {
20        Ok(vec![])
21    }
22
23    async fn delete_session(&self, _session_id: &str) -> io::Result<()> {
24        Ok(())
25    }
26
27    async fn list_session_ids(&self) -> io::Result<Vec<String>> {
28        Ok(vec![])
29    }
30
31    async fn append_log_entry(&self, _session_id: &str, _entry: &LogEntry) -> io::Result<()> {
32        Ok(())
33    }
34
35    async fn load_log(&self, _session_id: &str) -> io::Result<Vec<LogEntry>> {
36        Ok(vec![])
37    }
38
39    async fn create_session_storage(&self, _session_id: &str) -> io::Result<()> {
40        Ok(())
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    use super::*;
47
48    fn sample_session() -> Session {
49        Session::builder("s1", "macp.mode.decision.v1", "alice")
50            .ttl_expiry(61_000)
51            .ttl_ms(60_000)
52            .started_at_unix_ms(1_000)
53            .participants(vec!["alice".into()])
54            .mode_version("1.0.0")
55            .configuration_version("cfg-1")
56            .policy_version("pol-1")
57            .build()
58    }
59
60    #[tokio::test]
61    async fn memory_backend_is_noop() {
62        let backend = MemoryBackend;
63        backend.create_session_storage("s1").await.unwrap();
64        backend.save_session(&sample_session()).await.unwrap();
65        assert!(backend.load_session("s1").await.unwrap().is_none());
66        assert!(backend.load_all_sessions().await.unwrap().is_empty());
67        assert!(backend.list_session_ids().await.unwrap().is_empty());
68        backend.delete_session("s1").await.unwrap();
69    }
70}