74 次重大发布
新增 0.97.1 | 2024 年 8 月 21 日 |
---|---|
0.96.1 | 2024 年 7 月 29 日 |
0.91.0 | 2024 年 3 月 5 日 |
0.88.1 | 2023 年 12 月 14 日 |
0.12.0 | 2020 年 3 月 31 日 |
#467 在 命令行界面
每月 2,897 次下载
在 66 个 Crates 中使用 (65 个直接使用)
1.5MB
37K SLoC
nu-plugin
此 crate 为 Nushell 插件提供 API。有关如何开始的信息,请参阅 此书。
lib.rs
:
Nu 插件:Nushell 的插件库
此 crate 包含构建 Nushell 插件所需的接口。此外,它包含 Nushell 本身用于与 Nushell 插件接口的公开但未记录的项目。此文档重点介绍编写独立插件所需的接口。
Nushell 插件是独立的应用程序,它们通过 stdin 和 stdout 与 Nushell 通信,使用标准化的序列化框架交换 Nushell 命令原生的类型数据。
典型的插件应用程序将定义一个实现 Plugin
特性的 struct,然后在它的 main 方法中,将该 Plugin
传递给 [serve_plugin()
] 函数,该函数将处理 Nushell 调用时所有输入和输出的序列化。
use nu_plugin::{EvaluatedCall, MsgPackSerializer, serve_plugin};
use nu_plugin::{EngineInterface, Plugin, PluginCommand, SimplePluginCommand};
use nu_protocol::{LabeledError, Signature, Value};
struct MyPlugin;
struct MyCommand;
impl Plugin for MyPlugin {
fn version(&self) -> String {
env!("CARGO_PKG_VERSION").into()
}
fn commands(&self) -> Vec<Box<dyn PluginCommand<Plugin = Self>>> {
vec![Box::new(MyCommand)]
}
}
impl SimplePluginCommand for MyCommand {
type Plugin = MyPlugin;
fn name(&self) -> &str {
"my-command"
}
fn usage(&self) -> &str {
todo!();
}
fn signature(&self) -> Signature {
todo!();
}
fn run(
&self,
plugin: &MyPlugin,
engine: &EngineInterface,
call: &EvaluatedCall,
input: &Value
) -> Result<Value, LabeledError> {
todo!();
}
}
fn main() {
serve_plugin(&MyPlugin{}, MsgPackSerializer)
}
Nushell 的源树包含一个 插件示例,它展示了插件功能的全部范围。
依赖项
~22–56MB
~1M SLoC