#rpc #command #python #command-line #name #clap #build

command-rpc

这是一个用于替换 RPC 的 CLI 库和 API。

13 个版本

0.1.12 2024 年 5 月 28 日
0.1.11 2024 年 5 月 28 日
0.1.9 2023 年 5 月 1 日
0.1.6 2023 年 4 月 30 日

#151 in 过程宏

Download history 161/week @ 2024-05-22 204/week @ 2024-05-29 16/week @ 2024-06-05 1/week @ 2024-07-17 54/week @ 2024-07-24

每月 55 次下载

MIT/Apache

150KB
865

image

这是一个用 Rust 编写的命令行 RPC。它建立在著名的 Rust CLI 库 clap 之上。大多数功能都得到了保留,但使用 command_rpc 可以缩短样板代码。

官方版本:5 月 29 日 - YouTube 上将有一篇教程,这里也有链接!

为什么使用 command_rpc

crpc 是用来做什么的

  • 轻量级
  • 高效
  • 支持导出到任何语言
  • 用户或其他程序调用

当然,这可能会成为缺点,你不应该使用 crpc 来处理大型和默认协议 - 你可能也不应该用它来处理 I/O 密集型程序。

相对于纯 clap 的优势

  • 由于减少了样板代码,更加简洁且冗余更少

  • CLI 帮助文本中继承了类型提示

  • 由于展开,保留了所有 clap 功能

  • 易于编写且适合初学者

command_rpc 的使用

安装

运行 cargo add command-rpc 命令或在你的 Cargo.toml 中插入 command-rpc = "*"。目前,在 v0.1.12 中,这个工具正处于其开发的早期阶段。

示例

use command_rpc::crpc_main;

#[crpc_main]
pub mod my_cli_backend {
   use command_rpc::{cprc_mod, crpc_fn};

   #[cprc_fn]
   pub fn greet(
       /// The name of the person you want to greet.
       name: str
    ) {
      eprintln!("Hello, {}!", name);
  }

  #[crpc_mod]
  pub mod my_cli_backend_sub {
    use command_rpc::cprc_fn;

    #[crpc_fn]
    pub fn friendly_greet(
        /// The name of the person you want to greet.
        name: str,
        /// the adjective you want to use in the greeting.
        adjective: str 
     ) {
       eprintln!("Hello, {}! You are {}!", name, adjective);
     }
   }
}
fn main() {
   My_cli_mod::parse().delegate();
}

如何使用 crpc

  1. command-rpc 添加为依赖项。

  2. 编写一个具有 #[crpc_main] 属性的 crpc 模块。在该模块中(需要是公共的!)的函数,使用 #[crpc_fn] 进行注释,这些函数将作为命令嵌套,并且带有 #[crpc_mod] 的(公共)模块将被包含为子命令,其内部(公共)函数也将被包含。此外,注释将提取自函数签名 - 其他注释的提取方式与使用 clap 相同。(最好查看我们的示例 --> https://docs.rs/command-rpc/0.1.12/command_rpc/ )

  3. 使用 use command_rpc::* 导入所需的 proc 宏。

  4. main.rs 文件提供对这个模块的访问权限。你的 main 函数看起来如下

    fn main() {
      [name of your crpc_main module, first letter kapital]_::parse().delegate();
    }
    
  5. 现在您可以扩展、构建或编译您的程序。一开始不必担心错误报告,其中大部分在第一次构建和扩展后会消失。有关使用建议和可能尚未正确工作的事情的更多信息,请查看下面的 建议

建议

  • 使用 cargo expand 查看生成的代码。首先需要运行 cargo install cargo-expand!遗憾的是,您将看到所有展开,包括来自 clap 的展开。
  • 目前,对于 v0.1.12 版本,它没有输出。您可以使用 (e)print(ln)! 使您的 CLI 返回一些内容。此外,只打算使用原生类型作为输入类型。请随意强制用户了解 rust 语法,以将对象作为输入,否则您可以使用字符串作为(json)文件路径。
  • 目前,由于具有相同标识符的函数将展开为具有相同名称的结构体,因此无法为嵌套子命令提供命令参数。由于属性只能操作给定的代码,这将是难以实现的,但在 v0.1.12 版本之后的新版本中可能可以实现。
  • 当开发更复杂的命令行应用程序时,了解 clap 以获取有关 clapcommand_rpc 之间集成的更多信息!

贡献

为此,您可以给我(邮件:[email protected],Instagram: lsjohannes)写一封更长的合作消息,或者直接打开 pr。


版本概述/预览

  • v0.1.12:第一个工作版本
  • v0.1.13新功能:具有嵌套子命令的命令能够拥有自己的功能和参数
  • v0.1.14新功能:通过为每个命令添加版本范围来轻松管理版本
  • v0.1.15功能扩展:具有相同名称但版本范围不重叠的不同功能可以共存

依赖关系

~265–710KB
~17K SLoC