chat_system/messengers/
console.rs1use crate::{Message, Messenger};
4use anyhow::Result;
5use async_trait::async_trait;
6
7pub struct ConsoleMessenger {
8 name: String,
9 connected: bool,
10 messages: Vec<Message>,
11}
12
13impl ConsoleMessenger {
14 pub fn new(name: impl Into<String>) -> Self {
15 Self {
16 name: name.into(),
17 connected: false,
18 messages: Vec::new(),
19 }
20 }
21
22 pub fn enqueue(&mut self, message: Message) {
24 self.messages.push(message);
25 }
26}
27
28#[async_trait]
29impl Messenger for ConsoleMessenger {
30 fn name(&self) -> &str {
31 &self.name
32 }
33
34 fn messenger_type(&self) -> &str {
35 "console"
36 }
37
38 async fn initialize(&mut self) -> Result<()> {
39 self.connected = true;
40 println!("[{}] Console messenger initialized.", self.name);
41 Ok(())
42 }
43
44 async fn send_message(&self, recipient: &str, content: &str) -> Result<String> {
45 println!("[{}] → {}: {}", self.name, recipient, content);
46 Ok(format!("console:{}", chrono::Utc::now().timestamp_millis()))
47 }
48
49 async fn receive_messages(&self) -> Result<Vec<Message>> {
50 Ok(self.messages.clone())
53 }
54
55 fn is_connected(&self) -> bool {
56 self.connected
57 }
58
59 async fn disconnect(&mut self) -> Result<()> {
60 self.connected = false;
61 println!("[{}] Console messenger disconnected.", self.name);
62 Ok(())
63 }
64}