[RUST]命令行开发工具clap库使用指南

 一、编写目的

  实在是找不到讲解clap-rs的文章(对国内rust生态感到无力,教程少啊),所以啃了啃源码,简单讲下clap的使用,也好在以后自己忘了怎么用,可以回来看看,一次更不完的,后面会陆续补充

 二、clap简介

  Rust的clap库是一个用于命令行接口应用程序的参数解析器,主要功能是帮助开发者更轻松、高效的创建具有复杂命令行选项、参数和子命令的应用程序。开发者可以定义命令的结构、所需参数、选项格式、默认值、规则等。
  除clap还有structopt、pico-args、getopts等库,不过只能提供较简单的命令解析,不如clap功能全面,如果仅做简单的命令行工具可以使用上述其他库。

 三、基础使用

  首先cargo.toml引入clap
  clap = { version = "4.5.4", features = ["derive"] }
  或者直接引入
  cargo add clap --features derive
  不多说直接看例子,最烦的就是讲一大堆不放例子的文了

use clap::Parser;

#[test]
fn basic() {
    #[derive(Parser, PartialEq, Debug)]
    struct Opt {
        #[arg(short = 'a', long = "arg")]
        arg: i32,
    }
    assert_eq!(
        Opt { arg: 24 },
        Opt::try_parse_from(["test", "-a24"]).unwrap()
    );
}

  最基础的使用就是在struct添加derive宏

  可以看到Parser就是一个过程宏,具体不看,无非就是为struct实现一些trait,对过程宏有兴趣的可以啃啃,不过比较枯燥。
  接下来就是struct中字段上的#[arg(short = 'a', long = "arg")],arg宏的作用是设定字段为参数,这个参数就是命令行输入的参数,其中short为短参,long为长参,命令行中的输入如:-u https://bilibili.com --url https://bilibili.com
 -u和后面的参数中间的空格可以省略,–url同理。
Opt::try_parse_from(["test","-a24])是代码层面构建结构体的方法,其中test是一个名称,类似于给结构体的一个别称,并不重要,-a24即对应命令行参数,try_parse_from()一般用于测试。

再来一个简单的示例:

use clap::Parser;
#[derive(Parser, Debug)]
#[command(name = "zoo")]
struct Life{
    #[arg(short = 'a')]
    animal:String,
}
fn main(){
    let life = Life::parse();
    println!("output:{}",life.animal);
}

命令行执行:

PS Y:\rust\clap_test> cargo run -- -a pig   
   Compiling clap_test v0.1.0 (Y:\rust\clap_test)
    Finished dev [unoptimized + debuginfo] target(s) in 0.81s
     Running `target\debug\clap_test.exe -a pig`
output:pig

其中有个问题就是#[command(name = "zoo")]的name并没有找到具体的作用,按照程序来说应该是将zoo作为主命令 后面跟参数-a,但是build之后的.exe在执行clap_test -h后显示却是如下

Usage: clap_test.exe -a <ANIMAL>

Options:
  -a <ANIMAL>
  -h, --help       Print help

可见并没有出现zoo的字眼,矛盾的是通过程序获取help信息却出现了zoo

let output = <T as CommandFactory>::command().render_help().to_string();

output内容为:

Usage: zoo -a <ANIMAL>

Options:
  -a <ANIMAL>
  -h, --help       Print help

这就很令人困惑了,目前尚不知如何解释,如果有知道的可以评论区解惑下,感谢。

1. 理论不如实践,开发一个HTTP请求工具

  • 需求
    使用clap库开发一个http命令行请求工具,可以发送GET或POST请求,允许携带参数,并将响应结果返回。
  • 设计
    命令行调用方式示例:
    http get https://bilibili.com -a param1=1
    http post https://bilibili.com -b param1=1 -b param2=2
  • 代码
    此处不贴代码,后续会上传InsCode项目,大家可以去云上运行容器测试该工具(审核真的好慢 )


容器运行需要初始化环境和依赖,要等一会
初始化完成后,就可以测试了

clap暂时更新到这,后续有用到其他功能会继续补充

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值