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