1 个稳定版本
4.0.0 | 2023年11月13日 |
---|---|
3.0.5 |
|
3.0.2 |
|
2.0.1 |
|
0.0.9 |
|
#45 in #called
每月120 次下载
用于 zula
12KB
261 行代码(不含注释)
zula-core 是 zula shell 的核心模块。 zula-core
包含 zula shell 的核心功能,并用于编写插件。此 API 为实验性,可能引入破坏性更改。
插件指南
要创建插件,首先初始化一个库 crate。
cargo new my_plugin --lib
将 crate 类型设置为 cdylib
,并将 zula-core
添加为依赖项。
[lib]
crate-type = ["cdylib"]
[dependencies]
zula-core = "3.0.5"
导入 Plugin
trait 并在你的插件类型上实现它。
use zula-core::{Plugin, ShellState};
use std::error::Error;
pub struct MyPlugin;
impl Plugin for MyPlugin {
//since this function is called across abi boundaries, its important to include no_mangle so
//that rustc leaves the symbol as-is and can be called properly.
#[no_mangle]
fn init(&self) -> Box<dyn Plugin> {
Box::new(Self)
}
fn name(&self) -> &str {
"my_plugin"
}
fn call(&self, state: *mut ShellState) -> Result<(), Box<dyn Error>> {
println!("Hello, plugin!")
}
}
运行 cargo build --release
来构建你的插件。库文件应在 target/release/lib<name>.so
。这是你需要放入插件文件夹的文件。
就是这样!在 zula 中运行 zula cfg
来检查是否已加载,并运行 plugin.<name>
来使用它。由于奇怪的拥有关系,call
必须接受一个原始指针,因此请负责任地使用。
依赖项
~0.2–11MB
~62K SLoC