try arc instead of box

This commit is contained in:
Adrian Malacoda 2017-02-16 00:16:48 -06:00
parent b238b98b82
commit 7581521b61
3 changed files with 13 additions and 26 deletions

View File

@ -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<MessageSender>
sender: Arc<MessageSender>
}
impl Channel {
@ -95,7 +96,7 @@ impl Channel {
#[derive(Clone)]
pub struct User {
name: String,
sender: Box<MessageSender>
sender: Arc<MessageSender>
}
impl User {
@ -105,12 +106,5 @@ impl User {
}
pub trait MessageSender : Sync + Send {
fn box_clone (&self) -> Box<MessageSender>;
fn send_message (&self, message: &str) {}
}
impl Clone for Box<MessageSender> {
fn clone (&self) -> Box<MessageSender> {
self.box_clone()
}
}

View File

@ -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<MessageSender> {
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
})
};

View File

@ -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<MessageSender> {
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<Event>) {
let user = User {
name: String::from("Dave"),
sender: Box::new(StdinMessageSender {
sender: Arc::new(StdinMessageSender {
name: String::from("Dave")
})
};