macp_storage/storage/
memory.rs1use 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 use macp_core::session::SessionState;
50 use std::collections::HashSet;
51
52 Session {
53 session_id: "s1".into(),
54 state: SessionState::Open,
55 ttl_expiry: 61_000,
56 ttl_ms: 60_000,
57 started_at_unix_ms: 1_000,
58 resolution: None,
59 mode: "macp.mode.decision.v1".into(),
60 mode_state: vec![],
61 participants: vec!["alice".into()],
62 seen_message_ids: HashSet::new(),
63 intent: "".into(),
64 mode_version: "1.0.0".into(),
65 configuration_version: "cfg-1".into(),
66 policy_version: "pol-1".into(),
67 context_id: String::new(),
68 extensions: std::collections::HashMap::new(),
69 roots: vec![],
70 initiator_sender: "alice".into(),
71 participant_message_counts: std::collections::HashMap::new(),
72 participant_last_seen: std::collections::HashMap::new(),
73 policy_definition: None,
74 suspended_at_ms: None,
75 accumulated_suspended_ms: 0,
76 }
77 }
78
79 #[tokio::test]
80 async fn memory_backend_is_noop() {
81 let backend = MemoryBackend;
82 backend.create_session_storage("s1").await.unwrap();
83 backend.save_session(&sample_session()).await.unwrap();
84 assert!(backend.load_session("s1").await.unwrap().is_none());
85 assert!(backend.load_all_sessions().await.unwrap().is_empty());
86 assert!(backend.list_session_ids().await.unwrap().is_empty());
87 backend.delete_session("s1").await.unwrap();
88 }
89}