langchain_rust/memory/
dummy_memory.rs1use std::sync::Arc;
2
3use async_trait::async_trait;
4use tokio::sync::Mutex;
5
6use crate::schemas::{
7 memory::{BaseMemory, MemoryError},
8 messages::Message,
9};
10
11pub struct DummyMemory {}
12
13impl DummyMemory {
14 pub fn new() -> Self {
15 Self {}
16 }
17}
18
19impl Default for DummyMemory {
20 fn default() -> Self {
21 Self::new()
22 }
23}
24
25impl Into<Arc<dyn BaseMemory>> for DummyMemory {
26 fn into(self) -> Arc<dyn BaseMemory> {
27 Arc::new(self)
28 }
29}
30
31impl Into<Arc<Mutex<dyn BaseMemory>>> for DummyMemory {
32 fn into(self) -> Arc<Mutex<dyn BaseMemory>> {
33 Arc::new(Mutex::new(self))
34 }
35}
36
37#[async_trait]
38impl BaseMemory for DummyMemory {
39 async fn messages(&self) -> Result<Vec<Message>, MemoryError> {
40 Ok(vec![])
41 }
42
43 async fn add_message(&mut self, _message: Message) -> Result<(), MemoryError> {
44 Ok(())
45 }
46
47 async fn clear(&mut self) -> Result<(), MemoryError> {
48 Ok(())
49 }
50}
51
52#[cfg(test)]
53mod tests {
54 use super::*;
55
56 #[tokio::test]
57 async fn never_stores_messages() {
58 let mut memory = DummyMemory::new();
59 memory.add_user_message(&"ignored").await.unwrap();
60 memory.add_ai_message(&"ignored").await.unwrap();
61 assert!(memory.messages().await.unwrap().is_empty());
62 assert_eq!(memory.to_string().await.unwrap(), "");
63 }
64}