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;
|
mod event;
|
||||||
use event::Event;
|
use event::Event;
|
||||||
|
|
||||||
|
use std::sync::Arc;
|
||||||
use std::sync::mpsc;
|
use std::sync::mpsc;
|
||||||
use std::sync::mpsc::Sender;
|
use std::sync::mpsc::Sender;
|
||||||
|
|
||||||
@ -83,7 +84,7 @@ pub struct Channel {
|
|||||||
name: String,
|
name: String,
|
||||||
description: String,
|
description: String,
|
||||||
topic: String,
|
topic: String,
|
||||||
sender: Box<MessageSender>
|
sender: Arc<MessageSender>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Channel {
|
impl Channel {
|
||||||
@ -95,7 +96,7 @@ impl Channel {
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
name: String,
|
name: String,
|
||||||
sender: Box<MessageSender>
|
sender: Arc<MessageSender>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl User {
|
impl User {
|
||||||
@ -105,12 +106,5 @@ impl User {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub trait MessageSender : Sync + Send {
|
pub trait MessageSender : Sync + Send {
|
||||||
fn box_clone (&self) -> Box<MessageSender>;
|
|
||||||
fn send_message (&self, message: &str) {}
|
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 toml::Table;
|
||||||
|
|
||||||
use event;
|
use event;
|
||||||
|
|
||||||
|
use std::sync::Arc;
|
||||||
use std::sync::mpsc::Sender;
|
use std::sync::mpsc::Sender;
|
||||||
|
|
||||||
use MessageSender;
|
use MessageSender;
|
||||||
@ -28,18 +30,13 @@ impl DiscordPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct DiscordMessageSender {
|
pub struct DiscordMessageSender {
|
||||||
name: String
|
channel_id: discord::model::ChannelId
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MessageSender for DiscordMessageSender {
|
impl MessageSender for DiscordMessageSender {
|
||||||
fn box_clone (&self) -> Box<MessageSender> {
|
|
||||||
Box::new((*self).clone())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn send_message (&self, message: &str) {
|
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)) => {
|
Ok(Event::MessageCreate(message)) => {
|
||||||
let author = User {
|
let author = User {
|
||||||
name: message.author.name.clone(),
|
name: message.author.name.clone(),
|
||||||
sender: Box::new(DiscordMessageSender {
|
sender: Arc::new(DiscordMessageSender {
|
||||||
name: message.author.name
|
channel_id: message.channel_id
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -61,8 +58,8 @@ impl Plugin for DiscordPlugin {
|
|||||||
name: String::from("channel"),
|
name: String::from("channel"),
|
||||||
description: String::from(""),
|
description: String::from(""),
|
||||||
topic: String::from(""),
|
topic: String::from(""),
|
||||||
sender: Box::new(DiscordMessageSender {
|
sender: Arc::new(DiscordMessageSender {
|
||||||
name: String::from("channel")
|
channel_id: message.channel_id
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6,21 +6,17 @@ use toml::Table;
|
|||||||
use User;
|
use User;
|
||||||
use MessageSender;
|
use MessageSender;
|
||||||
|
|
||||||
|
use std::sync::Arc;
|
||||||
use std::sync::mpsc::Sender;
|
use std::sync::mpsc::Sender;
|
||||||
use event::Event;
|
use event::Event;
|
||||||
|
|
||||||
pub struct StdinPlugin {}
|
pub struct StdinPlugin {}
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct StdinMessageSender {
|
pub struct StdinMessageSender {
|
||||||
name: String
|
name: String
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MessageSender for StdinMessageSender {
|
impl MessageSender for StdinMessageSender {
|
||||||
fn box_clone (&self) -> Box<MessageSender> {
|
|
||||||
Box::new((*self).clone())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn send_message (&self, message: &str) {
|
fn send_message (&self, message: &str) {
|
||||||
println!("send to {:?}: {:?}", self.name, message);
|
println!("send to {:?}: {:?}", self.name, message);
|
||||||
}
|
}
|
||||||
@ -36,7 +32,7 @@ impl Plugin for StdinPlugin {
|
|||||||
fn produce_events<'a>(&'a self, sender: Sender<Event>) {
|
fn produce_events<'a>(&'a self, sender: Sender<Event>) {
|
||||||
let user = User {
|
let user = User {
|
||||||
name: String::from("Dave"),
|
name: String::from("Dave"),
|
||||||
sender: Box::new(StdinMessageSender {
|
sender: Arc::new(StdinMessageSender {
|
||||||
name: String::from("Dave")
|
name: String::from("Dave")
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user