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 过程宏
每月 55 次下载
150KB
865 行
这是一个用 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
-
将
command-rpc
添加为依赖项。 -
编写一个具有
#[crpc_main]
属性的crpc
模块。在该模块中(需要是公共的!)的函数,使用#[crpc_fn]
进行注释,这些函数将作为命令嵌套,并且带有#[crpc_mod]
的(公共)模块将被包含为子命令,其内部(公共)函数也将被包含。此外,注释将提取自函数签名 - 其他注释的提取方式与使用 clap 相同。(最好查看我们的示例 --> https://docs.rs/command-rpc/0.1.12/command_rpc/ ) -
使用
use command_rpc::*
导入所需的 proc 宏。 -
为
main.rs
文件提供对这个模块的访问权限。你的main
函数看起来如下fn main() { [name of your crpc_main module, first letter kapital]_::parse().delegate(); }
-
现在您可以扩展、构建或编译您的程序。一开始不必担心错误报告,其中大部分在第一次构建和扩展后会消失。有关使用建议和可能尚未正确工作的事情的更多信息,请查看下面的 建议。
建议
- 使用
cargo expand
查看生成的代码。首先需要运行cargo install cargo-expand
!遗憾的是,您将看到所有展开,包括来自clap
的展开。 - 目前,对于
v0.1.12
版本,它没有输出。您可以使用(e)print(ln)!
使您的 CLI 返回一些内容。此外,只打算使用原生类型作为输入类型。请随意强制用户了解 rust 语法,以将对象作为输入,否则您可以使用字符串作为(json)文件路径。 - 目前,由于具有相同标识符的函数将展开为具有相同名称的结构体,因此无法为嵌套子命令提供命令参数。由于属性只能操作给定的代码,这将是难以实现的,但在
v0.1.12
版本之后的新版本中可能可以实现。 - 当开发更复杂的命令行应用程序时,了解
clap
以获取有关clap
和command_rpc
之间集成的更多信息!
贡献
为此,您可以给我(邮件:[email protected],Instagram: lsjohannes)写一封更长的合作消息,或者直接打开 pr。
版本概述/预览
v0.1.12
:第一个工作版本v0.1.13
,新功能:具有嵌套子命令的命令能够拥有自己的功能和参数v0.1.14
,新功能:通过为每个命令添加版本范围来轻松管理版本v0.1.15
,功能扩展:具有相同名称但版本范围不重叠的不同功能可以共存
依赖关系
~265–710KB
~17K SLoC