Rust Crate 使用:structopt

structopt

Github
Crates.io

前言

前一篇介紹了命令行解析庫(kù)clap,它支持函數(shù)調(diào)用模式,宏模式,以及YAML模式,雖然它讓我們用極其簡(jiǎn)單的方式定義傳參,但還是需要自己去匹配結(jié)果,這過程中不乏結(jié)構(gòu)體,數(shù)組轉(zhuǎn)換。所以鄙人又找到了一個(gè)基于結(jié)構(gòu)體的解析命令行庫(kù),簡(jiǎn)化我們解析傳參結(jié)果。

介紹

structopt是一個(gè)通過結(jié)構(gòu)體來解析命令行參數(shù)??梢哉f它對(duì)clap庫(kù)進(jìn)行補(bǔ)充。

使用

或許有些同學(xué)不了解clap的使用,我用一個(gè)例子簡(jiǎn)單描述下,這有助于我們理解structopt庫(kù)的功能與作用。

起初

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")
    }
}

如果想把匹配后的結(jié)果進(jìn)行管理,便于后面使用,這時(shí)就需要自行去創(chuàng)建一個(gè)結(jié)構(gòu)體并保存,操作上顯得啰嗦。

現(xiàn)在

#[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" }

現(xiàn)在所有傳參都已經(jīng)解析好,保存在結(jié)構(gòu)體中了,方便我們后續(xù)使用。

由于上面初略使用了structopt庫(kù),現(xiàn)在你可能有幾個(gè)疑問,我這邊列舉幾個(gè),其實(shí)這些問題你能在structopt文檔上一一找到答案:

  • 如何定義命令的幾個(gè)屬性,name, short, default_value,help等。
  • 如何定義一個(gè)子命令。
  • 子命令能否分開定義并組合。
  • 如何自定義字符串解析。
  • 如何與clap交互。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,621評(píng)論 1 32
  • 晚上讀了畢淑敏的散文《造心》和《面具后面的臉》,感嘆作者的智慧及對(duì)生命的思考。 造心是一項(xiàng)艱難漫...
    利利lili閱讀 419評(píng)論 1 10
  • 韻律的紅月 今日覺察 今天這一覺睡的真舒服沒想到笑盈老師昨天臨時(shí)11點(diǎn)40療愈貌似自己就是那個(gè)時(shí)間段看視頻突然困得...
    Demi瑤瑤閱讀 501評(píng)論 0 2
  • 看云卷云舒 只是隨風(fēng)流動(dòng) 點(diǎn)點(diǎn)殘陽(yáng)斜掛西天 卻染紅了半邊天 有一滴殘淚滑落眼角 留下一絲遺憾 你說 夕陽(yáng)西下是最美...
    播音1801范文軒閱讀 162評(píng)論 0 0
  • 于是忙碌的街道上出現(xiàn)了一個(gè)氣嘟嘟的女生用自行車載著一個(gè)樂呵呵的男生彎彎扭扭的前進(jìn),旁邊的行人和自行車紛紛避讓,還有...
    回眸之間閱讀 274評(píng)論 0 1

友情鏈接更多精彩內(nèi)容