use std::io; use modules::Module; use toml::Table; use {MessageSender, Message, User}; use std::sync::Arc; use std::sync::mpsc::Sender; use event::Event; pub struct StdinModule {} pub struct StdinMessageSender { name: String } impl MessageSender for StdinMessageSender { fn send_message (&self, message: &str) { debug!("Send message to stdout: {:?}", message); println!("{}: {}", self.name, message); } } impl StdinModule { pub fn new (configuration: &Table) -> Box { Box::new(StdinModule {}) } } impl Module for StdinModule { fn produce_events<'a>(&'a self, sender: Sender>) { loop { let mut input = String::new(); match io::stdin().read_line(&mut input) { Ok(n) => { let message = Message { author: User { name: String::from("Dave"), sender: Box::new(StdinMessageSender { name: String::from("Dave") }) }, content: input, channel: None }; match sender.send(Arc::new(Event::Message { message: message })) { Err(err) => error!("Error sending message event: {:?}", err), Ok(_) => {} } } Err(error) => error!("error: {}", error), } } } }