use std::io; use nats::{Connection, Handler}; use crate::chat_message::ChatMessage; const SERVER: &str = "127.0.0.1"; const SUBJECT_MESSAGES: &str = "here.happens.messaging"; pub fn connect_to_nats() -> io::Result { nats::connect(SERVER) } pub fn subscribe_to_chat_messages(username: String, nc: &Connection) -> io::Result { // This runs the closure in a separate Thread let subscription = nc.subscribe(SUBJECT_MESSAGES)? .with_handler(move |msg| -> Result<(), io::Error> { match ChatMessage::try_from(msg.data) { Ok(message) => { // Do not show messages from me if message.author != username { println!("Received {}", message); } } Err(e) => eprintln!("{}", e), }; Ok(()) }); Ok(subscription) } pub fn publish_message(message: &ChatMessage, nc: &Connection) -> io::Result<()> { let json_string_utf8 = serde_json::to_string(message).expect("Cannot serialize message"); // TODO: there is no error if server is offline nc.publish(SUBJECT_MESSAGES, json_string_utf8)?; Ok(()) }