2 个稳定版本

1.1.0 2024 年 3 月 3 日
1.0.0 2024 年 3 月 3 日

#2271Rust 模式

MIT/Apache

88KB
2K SLoC

mist-pdk

Crates.io docs.rs

这是一个用于简化 Rust 中 mist 插件开发的 crate。您只需为您的自定义结构类型实现 trait MistPlugin,然后调用 generate_plugin! 宏来为您生成样板代码。

插件开发

要创建插件,使用 cargo new --lib 创建一个新的 crate,并在 Cargo.toml 中将 crate 类型设置为 cdylib。

[lib]
crate-type = ["cdylib"]

然后添加 mist-pdk 作为依赖项。

[dependencies]
mist-pdk = "1.0"

编写插件就像创建一个结构体来保存您可能需要在更新之间需要的任何状态,并为这个结构体实现 MistPlugininit 函数用于实例化您的结构体,并且是唯一没有提供默认实现的一个。在插件的生命周期内,update 函数将每帧(大约每 1/60 秒)调用一次,并提供一个 RunUpdate,您可以从其中确定计时器的当前状态。如果您的插件将控制 mist 操作,您可以从 update 返回一个 StateChangeRequest 来请求计时器改变状态。默认的 update 实现简单地返回 StateChangeRequest::None。最后,您可以使用 shutdown 函数来解除初始化您插件中需要的一切。默认情况下,它不做任何事情。

一旦实现了插件,您可以调用 generate_plugin! 并传入您插件结构体的名称,其余将自动处理。

插件生命周期

雾插件是一种(特定平台)动态库,在主雾应用程序运行时加载。每次用户在雾中打开新的分割文件(即程序启动时和之后每次加载新文件时),插件都会重新加载。加载时,雾通过调用插件中的 version 函数来检查插件编译时使用的 pdk 版本,该函数返回一个 u16,其中高8位为次要版本,低8位为主版本。此函数由 generate_plugin 自动生成。进行此版本检查是为了确保雾对插件函数签名的理解与实际插件函数相匹配。

然后,插件中的 init 函数被调用一次,传入对新打开运行的引用。init 函数的职责是初始化插件需要的任何状态,并实例化插件结构本身。在此之后(除对话框打开的时间外),插件中的 update 函数将带有在该帧上生成的 RunUpdate 的引用被调用。然后,update 函数可以返回一个 StateChangeRequest 给雾,雾将请求计时器进行更改或忽略(在 StateChangeRequest::None 的情况下)。

当关闭分割文件时(即在计时器退出或用户决定打开新分割文件时),雾会一次性调用插件中的 shutdown 函数。之后,插件将被卸载,内存将被释放。

依赖项

~270–730KB
~17K SLoC