plugin_interfaces/
callbacks.rs

1use std::ffi::c_char;
2use std::sync::OnceLock;
3
4/// 主程序提供给插件的回调函数集合
5/// 这些函数指针在插件加载时由主程序传递给插件
6#[repr(C)]
7pub struct HostCallbacks {
8
9    /// 向前端发送消息
10    pub send_to_frontend: extern "C" fn(*const c_char, *const c_char) -> bool,
11
12    /// 获取应用配置
13    pub get_app_config: extern "C" fn(*const c_char) -> *const c_char,
14
15    /// 调用其他插件
16    pub call_other_plugin: extern "C" fn(*const c_char, *const c_char) -> *const c_char,
17}
18
19/// 全局回调函数存储
20static HOST_CALLBACKS: OnceLock<HostCallbacks> = OnceLock::new();
21
22/// 设置主程序回调函数(由主程序调用)
23pub fn set_host_callbacks(callbacks: HostCallbacks) -> Result<(), HostCallbacks> {
24    HOST_CALLBACKS.set(callbacks)
25}
26
27/// 获取主程序回调函数(由插件调用)
28pub fn get_host_callbacks() -> Option<&'static HostCallbacks> {
29    HOST_CALLBACKS.get()
30}