plugin_macro.rs

 1#[macro_export]
 2macro_rules! impl_plugin {
 3    ($plugin:ty, $proxy:ident, [$($evt:ty => $pri:expr),*]) => {
 4        impl $crate::plugin::Plugin for $plugin {
 5            fn get_proxy(&mut self) -> &mut $crate::plugin::PluginProxy {
 6                &mut self.$proxy
 7            }
 8        }
 9
10        #[allow(unused_variables)]
11        impl $crate::plugin::PluginInit for $plugin {
12            fn init( dispatcher: &mut $crate::event::Dispatcher
13                   , me: ::std::sync::Arc<Box<$crate::plugin::Plugin>>) {
14                $(
15                    dispatcher.register($pri, unsafe {
16                        $crate::event::EventProxy::new::<$plugin>(me.clone())
17                    });
18                )*
19            }
20        }
21    };
22
23    ($plugin:ty, $proxy:ident, [$($evt:ty => $pri:expr),*,]) => {
24        impl_plugin!($plugin, $proxy, [$($evt => $pri),*]);
25    };
26}