#插件 #加载 #特性 #接口 #phaneron #节点 #已加载

phaneron-plugin

在Rust中实现Phaneron插件的接口

1个不稳定版本

0.1.2 2023年4月26日
0.1.1 2023年4月26日

#246 in 视频

24 每月下载量
用于 4 crates

MIT 许可证

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