From 7581521b61a00d2c6429705be9a7f29548f31930 Mon Sep 17 00:00:00 2001 From: Adrian Malacoda Date: Thu, 16 Feb 2017 00:16:48 -0600 Subject: [PATCH] try arc instead of box --- src/lib.rs | 12 +++--------- src/plugins/discord.rs | 19 ++++++++----------- src/plugins/stdin.rs | 8 ++------ 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index fb11dde..bee5ce2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,6 +12,7 @@ use plugins::loader::{PluginLoader, PluginLoaderError}; mod event; use event::Event; +use std::sync::Arc; use std::sync::mpsc; use std::sync::mpsc::Sender; @@ -83,7 +84,7 @@ pub struct Channel { name: String, description: String, topic: String, - sender: Box + sender: Arc } impl Channel { @@ -95,7 +96,7 @@ impl Channel { #[derive(Clone)] pub struct User { name: String, - sender: Box + sender: Arc } impl User { @@ -105,12 +106,5 @@ impl User { } pub trait MessageSender : Sync + Send { - fn box_clone (&self) -> Box; fn send_message (&self, message: &str) {} } - -impl Clone for Box { - fn clone (&self) -> Box { - self.box_clone() - } -} diff --git a/src/plugins/discord.rs b/src/plugins/discord.rs index 2b78582..69445e3 100644 --- a/src/plugins/discord.rs +++ b/src/plugins/discord.rs @@ -6,6 +6,8 @@ use plugins::Plugin; use toml::Table; use event; + +use std::sync::Arc; use std::sync::mpsc::Sender; use MessageSender; @@ -28,18 +30,13 @@ impl DiscordPlugin { } } -#[derive(Clone)] pub struct DiscordMessageSender { - name: String + channel_id: discord::model::ChannelId } impl MessageSender for DiscordMessageSender { - fn box_clone (&self) -> Box { - Box::new((*self).clone()) - } - fn send_message (&self, message: &str) { - println!("send to {:?}: {:?}", self.name, message); + println!("send to {:?}: {:?}", self.channel_id, message); } } @@ -52,8 +49,8 @@ impl Plugin for DiscordPlugin { Ok(Event::MessageCreate(message)) => { let author = User { name: message.author.name.clone(), - sender: Box::new(DiscordMessageSender { - name: message.author.name + sender: Arc::new(DiscordMessageSender { + channel_id: message.channel_id }) }; @@ -61,8 +58,8 @@ impl Plugin for DiscordPlugin { name: String::from("channel"), description: String::from(""), topic: String::from(""), - sender: Box::new(DiscordMessageSender { - name: String::from("channel") + sender: Arc::new(DiscordMessageSender { + channel_id: message.channel_id }) }; diff --git a/src/plugins/stdin.rs b/src/plugins/stdin.rs index 812af17..48711ca 100644 --- a/src/plugins/stdin.rs +++ b/src/plugins/stdin.rs @@ -6,21 +6,17 @@ use toml::Table; use User; use MessageSender; +use std::sync::Arc; use std::sync::mpsc::Sender; use event::Event; pub struct StdinPlugin {} -#[derive(Clone)] pub struct StdinMessageSender { name: String } impl MessageSender for StdinMessageSender { - fn box_clone (&self) -> Box { - Box::new((*self).clone()) - } - fn send_message (&self, message: &str) { println!("send to {:?}: {:?}", self.name, message); } @@ -36,7 +32,7 @@ impl Plugin for StdinPlugin { fn produce_events<'a>(&'a self, sender: Sender) { let user = User { name: String::from("Dave"), - sender: Box::new(StdinMessageSender { + sender: Arc::new(StdinMessageSender { name: String::from("Dave") }) };