Skip to main content

synaptic_memory/
buffer.rs

1use std::sync::Arc;
2
3use async_trait::async_trait;
4use synaptic_core::{MemoryStore, Message, SynapticError};
5
6/// A memory strategy that stores the full conversation buffer.
7///
8/// This is a passthrough wrapper around any `MemoryStore` that makes
9/// the "keep everything" strategy explicit and composable.
10pub struct ConversationBufferMemory {
11    store: Arc<dyn MemoryStore>,
12}
13
14impl ConversationBufferMemory {
15    /// Create a new buffer memory wrapping the given store.
16    pub fn new(store: Arc<dyn MemoryStore>) -> Self {
17        Self { store }
18    }
19}
20
21#[async_trait]
22impl MemoryStore for ConversationBufferMemory {
23    async fn append(&self, session_id: &str, message: Message) -> Result<(), SynapticError> {
24        self.store.append(session_id, message).await
25    }
26
27    async fn load(&self, session_id: &str) -> Result<Vec<Message>, SynapticError> {
28        self.store.load(session_id).await
29    }
30
31    async fn clear(&self, session_id: &str) -> Result<(), SynapticError> {
32        self.store.clear(session_id).await
33    }
34}