aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoracdenisSK <[email protected]>2017-07-03 15:12:48 +0200
committeracdenisSK <[email protected]>2017-07-03 15:12:48 +0200
commit4efe1d1271515e9ffecd318e368f127becfe273f (patch)
tree5f6cd42051b93e91bfefbc0947c63734b5f466f9 /src
parentChange the readme to use `docs.rs` instead of `serenity.zey.moe` (diff)
downloadserenity-4efe1d1271515e9ffecd318e368f127becfe273f.tar.xz
serenity-4efe1d1271515e9ffecd318e368f127becfe273f.zip
Add a macro here
Diffstat (limited to 'src')
-rw-r--r--src/client/dispatch.rs80
1 files changed, 32 insertions, 48 deletions
diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs
index fc3daaf..ded79fc 100644
--- a/src/client/dispatch.rs
+++ b/src/client/dispatch.rs
@@ -59,6 +59,36 @@ fn context(conn: &Arc<Mutex<Shard>>,
Context::new(conn.clone(), data.clone())
}
+// Heck you macro hygiene.
+macro_rules! impl_reaction_events {
+ (($event:ident, $conn:ident, $data:ident, $event_handler:ident, $framework:ident), $type_of_action:ident, $dispatch_name:ident) => {
+ let context = context($conn, $data);
+ let framework = $framework.lock().unwrap();
+
+ if framework.initialized {
+ $dispatch_name(context.clone(),
+ $event.reaction.clone(),
+ $event_handler);
+
+ let res = framework.reaction_actions
+ .iter()
+ .find(|&(ra, _)| {
+ if let ReactionAction::$type_of_action(ref kind) = *ra {
+ *kind == $event.reaction.emoji
+ } else {
+ false
+ }
+ });
+
+ if let Some((_, f)) = res {
+ f(context, $event.reaction.message_id, $event.reaction.channel_id);
+ }
+ } else {
+ $dispatch_name(context, $event.reaction, $event_handler);
+ }
+ }
+}
+
#[cfg(feature="framework")]
pub fn dispatch<H: EventHandler + Send + Sync + 'static>(event: Event,
conn: &Arc<Mutex<Shard>>,
@@ -81,56 +111,10 @@ pub fn dispatch<H: EventHandler + Send + Sync + 'static>(event: Event,
}
},
Event::ReactionAdd(event) => {
- let context = context(conn, data);
- let framework = framework.lock().unwrap();
-
- if framework.initialized {
- dispatch_reaction_add(context.clone(),
- event.reaction.clone(),
- event_handler);
-
- let res = framework.reaction_actions
- .iter()
- .find(|&(ra, _)| {
- if let ReactionAction::Add(ref kind) = *ra {
- *kind == event.reaction.emoji
- } else {
- false
- }
- });
-
- if let Some((_, f)) = res {
- f(context, event.reaction.message_id, event.reaction.channel_id);
- }
- } else {
- dispatch_reaction_add(context, event.reaction, event_handler);
- }
+ impl_reaction_events!((event, conn, data, event_handler, framework), Add, dispatch_reaction_add);
},
Event::ReactionRemove(event) => {
- let context = context(conn, data);
- let framework = framework.lock().unwrap();
-
- if framework.initialized {
- dispatch_reaction_remove(context.clone(),
- event.reaction.clone(),
- event_handler);
-
- let res = framework.reaction_actions
- .iter()
- .find(|&(ra, _)| {
- if let ReactionAction::Remove(ref kind) = *ra {
- *kind == event.reaction.emoji
- } else {
- false
- }
- });
-
- if let Some((_, f)) = res {
- f(context, event.reaction.message_id, event.reaction.channel_id);
- }
- } else {
- dispatch_reaction_remove(context, event.reaction, event_handler);
- }
+ impl_reaction_events!((event, conn, data, event_handler, framework), Remove, dispatch_reaction_remove);
},
other => handle_event(other, conn, data, event_handler),
}