1个不稳定版本
0.1.2 | 2023年4月26日 |
---|---|
0.1.1 |
|
#246 in 视频
24 每月下载量
用于 4 crates
29KB
609 代码行
Phaneron插件库
此crate提供了一种使用rust创建Phaneron插件的方法。
lib.rs
:
此模块定义了Phaneron插件成功加载需要实现的接口。
要创建插件,您必须有一个使用来自abi_stable
crate的#[export_root_module]
标注的函数。此函数应返回一个PhaneronPluginRootModule
,该模块作为可以用来初始化您的插件的句柄。此第一个函数不应执行任何额外的操作,例如加载资源等,因为您的插件将有机会稍后初始化自己。
然后您应该有一个使用来自abi_stable
crate的#[sabi_external_fn]
宏标注的load
函数。此函数是您的插件初始化器,您可以在此处加载全局必需的资源,并根据需要预分配大量内存。此函数允许失败,并且只会被调用一次。如果失败,则插件将不会加载,Phaneron也不会尝试再次加载该插件。如果失败,请返回一些有用的错误消息。
#[export_root_module]
fn instantiate_root_module() -> PhaneronPluginRootModuleRef {
PhaneronPluginRootModule { load }.leak_into_prefix()
}
#[sabi_extern_fn]
pub fn load(context: PhaneronPluginContext) -> RResult<PhaneronPlugin, RString> {
log::set_logger(phaneron_plugin::get_logger(&context)).unwrap();
log::set_max_level(LevelFilter::Trace);
let plugin = DemoPlugin {};
ROk(PhaneronPlugin_TO::from_value(plugin, TD_Opaque))
}
#
#
返回的plugin
在此例中为类型DemoPlugin
,实现了PhaneronPlugin
特质。此对象将用于从您的插件创建节点并管理其生命周期。请参阅PhaneronPlugin
的文档。
依赖关系
~4–10MB
~101K SLoC