1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//! 插件工厂相关定义
/// 插件工厂 trait
///
/// 定义插件工厂的标准接口,用于创建插件实例。
/// 工厂模式允许延迟创建插件实例,直到真正需要时。
///
/// # 要求
/// * `Send + Sync`: 工厂必须可以在线程间安全传递和共享
///
/// # 方法
/// * `create()`: 创建并返回一个新的插件实例
///
/// # 实现
/// 插件开发者需要实现此 trait,通常通过导出 `create_plugin` 函数来创建工厂实例。
///
/// # 示例
/// ```no_run
/// struct MyPluginFactory;
///
/// impl PluginFactory for MyPluginFactory {
/// fn create(&self) -> Box<dyn Plugin> {
/// Box::new(MyPlugin::new())
/// }
/// }
/// ```
/// 导出插件工厂函数类型
///
/// 定义插件必须导出的标准入口函数类型。
/// 插件动态库必须导出名为 `create_plugin` 的函数,签名与此类型匹配。
///
/// # 函数签名
/// `fn() -> Box<dyn PluginFactory>` - 无参数,返回插件工厂实例
///
/// # 使用
/// 插件加载器会从动态库中获取此函数,然后调用它来创建插件工厂。
///
/// # 示例
/// ```no_run
/// // 在插件动态库中导出
/// #[no_mangle]
/// pub extern "C" fn create_plugin() -> *mut dyn PluginFactory {
/// Box::into_raw(Box::new(MyPluginFactory))
/// }
/// ```
pub type CreatePluginFn = fn ;