4 个版本 (2 个重大变更)
0.3.0 | 2022年2月13日 |
---|---|
0.2.0 | 2022年1月16日 |
0.1.1 | 2020年8月30日 |
0.1.0 | 2020年8月30日 |
在 命令行界面 中排名 745
每月下载量 159
用于 6 个软件包
9KB
该软件包提供用于命令行参数解析的属性宏。
用法
只需在函数上添加属性 #[cmd]
,函数即可转换为命令行程序。
#[argopt::cmd]
fn main(host: String, port: u16) {
// ...
}
$ cargo run
error: The following required arguments were not provided:
<HOST>
<PORT>
USAGE:
argopt-test <HOST> <PORT>
For more information try --help
$ cargo run -- --help
argopt-test
USAGE:
argopt-test <HOST> <PORT>
ARGS:
<HOST>
<PORT>
OPTIONS:
-h, --help Print help information
您可以通过添加 #[opt(...)]
属性来自定义参数的行为。
#[argopt::cmd]
fn main(
#[opt(short = 'h', long = "host")]
host: String,
#[opt(short, long, default_value_t = 80)]
port: u16,
) {
// ...
}
您还可以通过添加文档注释来添加帮助信息。
/// Sample program
#[argopt::cmd]
fn main(
/// Host name
#[opt(short = 'h', long = "host")]
host: String,
/// Port number
#[opt(short, long, default_value_t = 80)]
port: u16,
) {
// ...
}
您还可以使用 #[opt(...)]
属性来自定义应用程序的行为。
/// Sample program
#[argopt::cmd]
#[opt(author, version, about, long_about = None)]
fn main(
/// Host name
#[opt(short = 'h', long = "host")]
host: String,
/// Port number
#[opt(short, long, default_value_t = 80)]
port: u16,
) {
// ...
}
$ cargo run -- --help
argopt-test 0.1.0
Sample program
USAGE:
argopt-test [OPTIONS] --host <HOST>
OPTIONS:
-h, --host <HOST> Host name
--help Print help information
-p, --port <PORT> Port number [default: 80]
-V, --version Print version information
可用的选项与 clap::Parser 的选项相同。
子命令
您可以通过将属性 #[subcmd]
添加到函数来创建子命令。
use argopt::{subcmd, cmd_group};
use std::path::PathBuf;
#[subcmd]
fn add(
#[opt(short)]
interactive: bool,
#[opt(short)]
patch: bool,
files: Vec<PathBuf>,
) {
// ...
}
#[subcmd]
fn commit(
#[opt(short)]
message: Option<String>,
#[opt(short)]
all: bool,
) {
// ...
}
#[cmd_group(commands = [add, commit])]
#[opt(author, version, about, long_about = None)]
fn main() {}
易于处理详细程度级别
有一个功能允许您与 log 软件包交互并自动处理详细程度级别。
use argopt::cmd;
use log::*;
#[cmd(verbose)]
fn main() {
error!("This is error");
warn!("This is warn");
info!("This is info");
debug!("This is debug");
trace!("This is trace");
}
$ cargo run
This is error
$ cargo run -- -v
This is error
This is warn
$ cargo run -- -vv
This is error
This is warn
This is info
$ cargo run -- -vvv
This is error
This is warn
This is info
This is debug
$ cargo run -- -vvvv
This is error
This is warn
This is info
This is debug
This is trace
您还可以使用 verbose
选项来自定义子命令应用程序。
...
#[cmd_group(commands = [add, commit], verbose)]
fn main() {}
依赖关系
~3.5MB
~69K SLoC