pub mod lua; pub mod discord; pub mod stdin; pub mod echo; pub mod random; pub mod pvn; 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, module_type: String, config: Table } impl Module { pub fn run (&self, sender: Box>, receiver: Receiver>) { self.event_loop.run(sender, receiver); } pub fn can_handle_event (&self, envelope: &Envelope) -> bool { let filters: BTreeSet = 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>, _: Receiver>) {} }