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命令行界面

Download history 511/week @ 2024-05-03 448/week @ 2024-05-10 552/week @ 2024-05-17 814/week @ 2024-05-24 1228/week @ 2024-05-31 710/week @ 2024-06-07 758/week @ 2024-06-14 1037/week @ 2024-06-21 515/week @ 2024-06-28 403/week @ 2024-07-05 507/week @ 2024-07-12 730/week @ 2024-07-19 1009/week @ 2024-07-26 619/week @ 2024-08-02 583/week @ 2024-08-09 553/week @ 2024-08-16

每月 2,897 次下载
66 Crates 中使用 (65 个直接使用)

MIT 和可能 CC-PDDC

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