Skip to main content

rustyclaw_core/messengers/
console.rs

1//! Console messenger - prints to stdout (for testing/debugging).
2
3use super::{Message, Messenger};
4use anyhow::Result;
5use async_trait::async_trait;
6use tracing::debug;
7
8/// Console messenger that prints to stdout (useful for testing/debugging)
9pub struct ConsoleMessenger {
10    name: String,
11    connected: bool,
12}
13
14impl ConsoleMessenger {
15    pub fn new(name: String) -> Self {
16        Self {
17            name,
18            connected: false,
19        }
20    }
21}
22
23#[async_trait]
24impl Messenger for ConsoleMessenger {
25    fn name(&self) -> &str {
26        &self.name
27    }
28
29    fn messenger_type(&self) -> &str {
30        "console"
31    }
32
33    async fn initialize(&mut self) -> Result<()> {
34        self.connected = true;
35        debug!(name = %self.name, "ConsoleMessenger initialized");
36        Ok(())
37    }
38
39    async fn send_message(&self, recipient: &str, content: &str) -> Result<String> {
40        let id = format!("console-{}", chrono::Utc::now().timestamp_millis());
41        println!("[{}] To {}: {}", self.name, recipient, content);
42        Ok(id)
43    }
44
45    async fn receive_messages(&self) -> Result<Vec<Message>> {
46        Ok(Vec::new())
47    }
48
49    fn is_connected(&self) -> bool {
50        self.connected
51    }
52
53    async fn disconnect(&mut self) -> Result<()> {
54        self.connected = false;
55        debug!(name = %self.name, "ConsoleMessenger disconnected");
56        Ok(())
57    }
58}