#shell #plugin #object #plugin-api #traits #called #zula

zula-core

zula 的核心 shell 对象

1 个稳定版本

4.0.0 2023年11月13日
3.0.5 2023年11月13日
3.0.2 2023年8月24日
2.0.1 2023年8月23日
0.0.9 2023年8月21日

#45 in #called

Download history 46/week @ 2024-04-01 64/week @ 2024-04-29

每月120 次下载
用于 zula

MIT/Apache

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