美文网首页GoRust Crate
Rust Crate 使用:structopt

Rust Crate 使用:structopt

作者: kayryu | 来源:发表于2019-03-07 20:50 被阅读37次

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交互。

相关文章

  • Rust Crate 使用:structopt

    structopt Github Crates.io 前言 在前一篇介绍了命令行解析库clap,它支持函数调用模...

  • rust05模块

    库(crate) Rust中有四种库(crate):core crate(核心库)、std crate(标准库)、...

  • Rust Crate 使用:rustbreak

    rustbreak Github Crates.io 前言 持久化就是把数据保存到可掉电式存储设备中以供之后使用...

  • Rust Crate 使用:serde

    serde Github Crates.io 前言 序列化和反序列化是非常通用的功能,在网络传输,数据存储上极其...

  • Rust Crate 使用:clap

    Clap Github Crates.io 前言 狠狠狠好用的库介绍。如果你对控制台情有独钟,必然会接触到命令行...

  • RUST AVR COMPILE

    https://book.avr-rust.com/004-flashing-a-crate-to-chip.ht...

  • [Rust] 导入和模块

    Rust中将传统的lib或者库称为 crate, 通常的包称为模块(module), 使用use关键字引用crat...

  • Rust Crate 使用:error-chain

    Error-chain Github crates.io 前言 错误和异常傻傻分不清,这里统称为错误吧。Rust ...

  • Rust Crate 使用:log4rs

    log4rs Github Crates.io 介绍 log4rs是一个高效的日志库框架,借鉴了 java 的 ...

  • Rust for cpp devs - 用 Packages C

    Rust 中包含三个不同层级的结构: package crate module package 是由一个或多个 c...

网友评论

    本文标题:Rust Crate 使用:structopt

    本文链接:https://www.haomeiwen.com/subject/akzhpqtx.html