vanguard_plugin/
exports.rs1use crate::VanguardPlugin;
2
3#[repr(C)]
5pub struct RawPlugin {
6 pub instance: Box<dyn VanguardPlugin>,
8}
9
10pub type CreatePluginFn = unsafe extern "C" fn() -> *mut RawPlugin;
12
13pub const CREATE_PLUGIN_SYMBOL: &[u8] = b"create_plugin";
15
16#[macro_export]
18macro_rules! export_plugin {
19 ($plugin_type:ty) => {
20 #[no_mangle]
21 pub unsafe extern "C" fn create_plugin() -> *mut $crate::exports::RawPlugin {
22 let plugin = <$plugin_type>::default();
24
25 let instance = Box::new(plugin) as Box<dyn $crate::VanguardPlugin>;
27
28 let raw = $crate::exports::RawPlugin { instance };
30
31 Box::into_raw(Box::new(raw))
33 }
34 };
35}
36
37#[macro_export]
39macro_rules! export_plugin_with {
40 ($plugin_type:ty, $constructor:expr) => {
41 #[no_mangle]
42 pub unsafe extern "C" fn create_plugin() -> *mut $crate::exports::RawPlugin {
43 let plugin = $constructor();
45
46 let instance = Box::new(plugin) as Box<dyn $crate::VanguardPlugin>;
48
49 let raw = $crate::exports::RawPlugin { instance };
51
52 Box::into_raw(Box::new(raw))
54 }
55 };
56}