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

Download history 74/week @ 2024-03-11 42/week @ 2024-03-18 62/week @ 2024-03-25 79/week @ 2024-04-01 38/week @ 2024-04-08 58/week @ 2024-04-15 44/week @ 2024-04-22 44/week @ 2024-04-29 45/week @ 2024-05-06 42/week @ 2024-05-13 42/week @ 2024-05-20 29/week @ 2024-05-27 47/week @ 2024-06-03 36/week @ 2024-06-10 28/week @ 2024-06-17 45/week @ 2024-06-24

每月下载量 159
用于 6 个软件包

MIT 许可证

9KB

Crates.io Workflow Status

该软件包提供用于命令行参数解析的属性宏。

用法

只需在函数上添加属性 #[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