try arc instead of box
This commit is contained in:
parent
b238b98b82
commit
7581521b61
12
src/lib.rs
12
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<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()
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
})
|
||||
};
|
||||
|
||||
|
@ -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")
|
||||
})
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user