From 5b9f1610ddcbd367848a3559ee399153181945cd Mon Sep 17 00:00:00 2001 From: Adrian Malacoda Date: Wed, 15 Feb 2017 22:41:52 -0600 Subject: [PATCH] attempt to flesh out send support for channel/message. Currently does not build --- src/event/mod.rs | 10 +++++----- src/lib.rs | 22 ++++++++++++---------- src/plugins/discord.rs | 16 ++++++++++++++-- src/plugins/stdin.rs | 17 ++++++++--------- 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/src/event/mod.rs b/src/event/mod.rs index b8e8690..c5f4863 100644 --- a/src/event/mod.rs +++ b/src/event/mod.rs @@ -1,8 +1,8 @@ use {Channel, User}; -#[derive(Debug, Clone)] -pub enum Event { - Message { sender: User, channel: Option, content: String }, - Join { channel: Channel }, - Quit { channel: Channel } +#[derive(Clone)] +pub enum Event<'a> { + Message { sender: User<'a>, channel: Option>, content: String }, + Join { channel: Channel<'a> }, + Quit { channel: Channel<'a> } } diff --git a/src/lib.rs b/src/lib.rs index ef77940..bbc0db4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,26 +78,28 @@ impl Tenquestionmarks { } } -#[derive(Debug, Clone)] -pub struct Channel { +#[derive(Clone)] +pub struct Channel<'a> { name: String, description: String, - topic: String + topic: String, + send_function: &'a Fn(&Channel, &str) } -impl Channel { +impl<'a> Channel<'a> { pub fn send (&self, message: &str) { - println!("send to {:?}: {:?}", self.name, message); + (self.send_function)(self, message); } } -#[derive(Debug, Clone)] -pub struct User { - name: String +#[derive(Clone)] +pub struct User<'a> { + name: String, + send_function: &'a Fn(&User, &str) } -impl User { +impl<'a> User<'a> { pub fn send (&self, message: &str) { - println!("send to {:?}: {:?}", self.name, message); + (self.send_function)(self, message); } } diff --git a/src/plugins/discord.rs b/src/plugins/discord.rs index 51889f7..13da6c3 100644 --- a/src/plugins/discord.rs +++ b/src/plugins/discord.rs @@ -37,10 +37,22 @@ impl Plugin for DiscordPlugin { match connection.recv_event() { Ok(Event::MessageCreate(message)) => { let author = User { - name: message.author.name + name: message.author.name, + send_function: &(|user: &User, message: &str| { + println!("Send to {:?}: {:?}", user.name, message); + }) }; - sender.send(event::Event::Message { sender: author, content: message.content, channel: None }); + let channel = Channel { + name: String::from("channel"), + description: String::from(""), + topic: String::from(""), + send_function: &(|channel: &Channel, message: &str| { + println!("Send to {:?}: {:?}", channel.name, message); + }) + }; + + sender.send(event::Event::Message { sender: author, content: message.content, channel: Option::Some(channel) }); } Ok(_) => {} Err(discord::Error::Closed(code, body)) => { diff --git a/src/plugins/stdin.rs b/src/plugins/stdin.rs index ab45463..f897a45 100644 --- a/src/plugins/stdin.rs +++ b/src/plugins/stdin.rs @@ -8,23 +8,22 @@ use User; use std::sync::mpsc::Sender; use event::Event; -pub struct StdinPlugin { - user: User -} +pub struct StdinPlugin {} impl StdinPlugin { pub fn new (configuration: &Table) -> Box { - Box::new(StdinPlugin { - user: User { - name: String::from("Dave") - } - }) + Box::new(StdinPlugin {}) } } impl Plugin for StdinPlugin { fn produce_events<'a>(&'a self, sender: Sender) { - let user = &self.user; + let user = User { + name: String::from("Dave"), + send_function: &(|user: &User, message: &str| { + println!("Send to {:?}: {:?}", user.name, message); + }) + }; loop { let mut input = String::new();