6 个版本

使用旧的 Rust 2015

0.1.5 2022年3月31日
0.1.4 2022年3月31日
0.1.2 2018年4月13日
0.1.1 2017年4月30日

#409命令行界面

Download history 18/week @ 2024-03-17 14/week @ 2024-03-24 43/week @ 2024-03-31 9/week @ 2024-04-07 13/week @ 2024-04-14 23/week @ 2024-04-21 18/week @ 2024-04-28 14/week @ 2024-05-05 10/week @ 2024-05-12 4/week @ 2024-05-19 8/week @ 2024-05-26 14/week @ 2024-06-02 13/week @ 2024-06-09 40/week @ 2024-06-16 17/week @ 2024-06-23 2/week @ 2024-06-30

73 每月下载量
用于 4 个软件包 (3 直接)

MIT/Apache 许可

21KB
444

tickbh 的 Commander

Rust 命令行界面的完整解决方案。

Build Status

如何安装它?

将以下内容添加到您的项目中的 Cargo.toml 文件

[dependencies]
commander = "0.1"

如何使用它?

extern crate commander;
use commander::Commander;

如何获取正确的构建时间

构建时间是指 commander 的构建时间,如果您发布的是版本,您可以执行

cargo clean -p commander

首先,这样您将获得正确的构建时间

选项解析

使用 commander 定义的选项通过 .option().option_str().option_int().option_float().option_list() 方法。以下示例从 std::env::args()Vec<String> 解析参数和选项,剩余的参数可以通过函数 .get().get_str().get_int().get_float().get_list() 获取。

extern crate commander;
use commander::Commander;

fn main() {
    let command = Commander::new()
                .version(&env!("CARGO_PKG_VERSION").to_string())
                .usage("test")
                .usage_desc("Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.")
                .option_list("-l, --list [value]", "list", Some(vec!["a".to_string(), "b".to_string(), "c".to_string()]))
                .option_int("--enum [value]", "enum", None)
                .option_int("-d, --debug [value]", "debug", Some(123))
                .option_str("-c, --copy [value]", "copy content", Some("source".to_string()))
                .option("-r", "enable recursive", None)
                .parse_env_or_exit()
                ;
    
    if let Some(s) = command.get_str("c") {
        println!("arg c = {}", s);
    }

    if let Some(s) = command.get_str("copy") {
        println!("arg copy = {}", s);
    }

    if let Some(d) = command.get_int("d") {
        println!("arg d = {}", d);
    }

    if let Some(e) = command.get_int("enum") {
        println!("arg enum = {}", e);
    }

    if let Some(l) = command.get_list("list") {
        println!("arg list = {}", l);
    }

    if let Some(r) = command.get("r") {
        println!("arg r = {}", r);
    }
}

如果您构建的是 bin 文件 test,以下示例显示输出信息。

  1. ./test -c xxxx -d
arg c = xxxx
arg copy = xxxx
arg d = 123
//arg c and copy is the same arg, and we has d param but we not set the value, it read from default:123
  1. ./test -h #它会显示帮助信息并退出程序
Usage:./test test
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Options:
  -v, --version               Show the bin version and build time
  -h, --help                  Show this help message and exit
  -l, --list [value]          list		 default:a, b, c
      --enum [value]          enum
  -d, --debug [value]         debug		 default:123
  -c, --copy [value]          拷贝内容		 default:aaa
  -r                          enable recursive
  1. ./test -v #它将显示版本和构建时间然后退出程序
Version:0.1.1
Build Time:2017-04-29T14:11:24+08:00
  1. ./test --enum aa -r --list aa bb cc #我们提供枚举和列表参数
arg list = ["aa", "bb", "cc"]
arg r = true
// we has the arg enum, but the enum is not a vaild int, so convert failed, and we provide arg r, so r is true

贡献

欢迎贡献!

无运行时依赖

~120KB