55 lines
1.4 KiB
Rust
Raw Normal View History

pub mod lua;
pub mod discord;
pub mod stdin;
pub mod echo;
2017-02-16 02:00:38 -06:00
pub mod random;
2017-02-19 04:49:06 -06:00
pub mod pvn;
2017-02-22 23:40:30 -06:00
pub mod echobox;
pub mod autolink;
pub mod logger;
pub mod loader;
use Tenquestionmarks;
use event::Envelope;
use std::sync::Arc;
use std::sync::mpsc::Receiver;
use transformable_channels::mpsc::ExtSender;
use toml::Table;
use std::collections::btree_set::BTreeSet;
pub struct Module {
event_loop: Box<EventLoop>,
module_type: String,
config: Table
}
impl Module {
pub fn run (&self, sender: Box<ExtSender<Envelope>>, receiver: Receiver<Arc<Envelope>>) {
self.event_loop.run(sender, receiver);
}
pub fn can_handle_event (&self, envelope: &Envelope) -> bool {
let filters: BTreeSet<String> = self.config.get("filters")
.and_then(|value| value.as_slice())
.map(|value| value.to_vec())
.unwrap_or(vec![])
.into_iter()
.map(|value| { String::from(value.as_str().unwrap()) })
.collect();
if filters.is_empty() {
return true;
}
filters.intersection(&envelope.tags).count() > 0
}
}
pub trait EventLoop : Sync {
fn run (&self, _: Box<ExtSender<Envelope>>, _: Receiver<Arc<Envelope>>) {}
}