Rust Crate 使用:structopt

structopt

Github
Crates.io

前言

前一篇介绍了命令行解析库clap,它支持函数调用模式,宏模式,以及YAML模式,虽然它让我们用极其简单的方式定义传参,但还是需要自己去匹配结果,这过程中不乏结构体,数组转换。所以鄙人又找到了一个基于结构体的解析命令行库,简化我们解析传参结果。

介绍

structopt是一个通过结构体来解析命令行参数。可以说它对clap库进行补充。

使用

或许有些同学不了解clap的使用,我用一个例子简单描述下,这有助于我们理解structopt库的功能与作用。

起初

extern crate clap;

use clap::{Arg, App};

fn main() {
    let matches = App::new("MayApp")
        .arg(Arg::with_name("verbose")
            .short("v")
            .multiple(true)
            .help("verbosity level"))
        .args_from_usage("-p, --path=[FILE] 'Target file you want to change'")
        .get_matches();

    if let Some(f) = matches.value_of("path") {
        println!("path : {}", f);
    }
    
    if _ = matches.occurrences_of("verbose") {
        0 => println!("zero"),
        1 => println!("one"),
        _ => println!("more")
    }
}

如果想把匹配后的结果进行管理,便于后面使用,这时就需要自行去创建一个结构体并保存,操作上显得啰嗦。

现在

#[macro_use] extern crate structopt;

use structopt::StructOpt;

#[derive(Debug, StructOpt)]
#[structopt(name = "MayApp", about = "An example of StructOpt usage.")]
struct Opt {
    /// verbosity level
    #[structopt(short = "v", parse(from_occurrences))]
    verbose: u32,
    /// Set speed
    #[structopt(short = "s", long = "speed", default_value = "42")]
    speed: f64,
    /// Input file
    #[structopt(parse(from_str))]
    input: String,
}

fn main() {
    let opt = Opt::from_args();
    println!("{:?}", opt);
}

输入与输出:

>>> 
cargo run --example u-structopt -- -vvv abc
>>>
Opt { verbose: 3, speed: 42.0, input: "abc" }

现在所有传参都已经解析好,保存在结构体中了,方便我们后续使用。

由于上面初略使用了structopt库,现在你可能有几个疑问,我这边列举几个,其实这些问题你能在structopt文档上一一找到答案:

  • 如何定义命令的几个属性,name, short, default_value,help等。
  • 如何定义一个子命令。
  • 子命令能否分开定义并组合。
  • 如何自定义字符串解析。
  • 如何与clap交互。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,913评论 1 32
  • 晚上读了毕淑敏的散文《造心》和《面具后面的脸》,感叹作者的智慧及对生命的思考。 造心是一项艰难漫...
    利利lili阅读 2,958评论 1 10
  • 韵律的红月 今日觉察 今天这一觉睡的真舒服没想到笑盈老师昨天临时11点40疗愈貌似自己就是那个时间段看视频突然困得...
    Demi瑶瑶阅读 3,311评论 0 2
  • 看云卷云舒 只是随风流动 点点残阳斜挂西天 却染红了半边天 有一滴残泪滑落眼角 留下一丝遗憾 你说 夕阳西下是最美...
    播音1801范文轩阅读 1,261评论 0 0
  • 于是忙碌的街道上出现了一个气嘟嘟的女生用自行车载着一个乐呵呵的男生弯弯扭扭的前进,旁边的行人和自行车纷纷避让,还有...
    回眸之间阅读 1,747评论 0 1

友情链接更多精彩内容