Rust Crate 使用:structopt

structopt

Github
Crates.io

前言

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

介紹

structopt是一個(gè)通過(guò)結(jié)構(gòu)體來(lái)解析命令行參數(shù)∶角可以說(shuō)它對(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è)疑問(wèn)丹墨,我這邊列舉幾個(gè)廊遍,其實(shí)這些問(wèn)題你能在structopt文檔上一一找到答案:

  • 如何定義命令的幾個(gè)屬性,name贩挣, short喉前, default_value,help等王财。
  • 如何定義一個(gè)子命令卵迂。
  • 子命令能否分開(kāi)定義并組合。
  • 如何自定義字符串解析绒净。
  • 如何與clap交互见咒。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挂疆,隨后出現(xiàn)的幾起案子改览,更是在濱河造成了極大的恐慌,老刑警劉巖缤言,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恃疯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡墨闲,警方通過(guò)查閱死者的電腦和手機(jī)今妄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸳碧,“玉大人盾鳞,你說(shuō)我怎么就攤上這事≌袄耄” “怎么了腾仅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)套利。 經(jīng)常有香客問(wèn)我推励,道長(zhǎng)鹤耍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任验辞,我火速辦了婚禮稿黄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跌造。我一直安慰自己杆怕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布壳贪。 她就那樣靜靜地躺著陵珍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪违施。 梳的紋絲不亂的頭發(fā)上互纯,一...
    開(kāi)封第一講書(shū)人閱讀 49,856評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音磕蒲,去河邊找鬼留潦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛亿卤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鹿霸,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼排吴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了懦鼠?” 一聲冷哼從身側(cè)響起钻哩,我...
    開(kāi)封第一講書(shū)人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肛冶,沒(méi)想到半個(gè)月后街氢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睦袖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年珊肃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馅笙。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伦乔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出董习,到底是詐尸還是另有隱情烈和,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布皿淋,位于F島的核電站招刹,受9級(jí)特大地震影響恬试,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疯暑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一训柴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缰儿,春花似錦畦粮、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至瞪浸,卻和暖如春儒将,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背对蒲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工钩蚊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹈矮。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓砰逻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親泛鸟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝠咆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

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