15个版本 (稳定版)

3.1.3 2023年7月1日
2.0.3 2022年7月16日
2.0.2 2022年4月15日
2.0.1 2022年3月24日
0.0.3 2022年3月12日

#94命令行接口

Download history 24/week @ 2024-03-29 6/week @ 2024-04-05

每月 90 次下载
用于 sssg

GPL-2.0-only

28KB
158

Clappers

命令行参数解析特别简单,相对直接!

Clappers旨在成为银河系中最易用的命令行参数解析器。您可以通过链式调用配置Clappers解析器,其中最后一个链接是对build()的调用。然后通过Clappers解析器的getter获取命令行参数值。

示例1 - 最基本的目录列表

use clappers::Clappers;

fn main() {
    let clappers = Clappers::new()
        .set_flags(vec![
            "h|help",
            "l",
            "R|recursive",
        ])
        .build();

    if clappers.get_flag("help") {
        println!("
            usage: ls [arguments] [FILE1]...

            Arguments:
                -h|--help        Print this help
                -l               Use a long listing format
                -R|--recursive   List subdirectories recursively
        ");
    }

    if clappers.get_flag("l") {
        // Show more details than usual
    }

    if clappers.get_flag("R") {
        // Recurse into subdirectories
    }

    if clappers.get_flag("recursive") {
        // This will also recurse
    }

    let filenames: Vec<String> = clappers.get_leftovers();

    // ...
}

示例2 - 最基本的编译器

use clappers::Clappers;

fn main() {
    let clappers = Clappers::new()
        .set_flags(vec![
            "h|help",
            "v|verbose",
        ])
        .set_singles(vec![
            "o|output",
        ])
        .set_multiples(vec![
            "i|input",
            "I",
            "L",
        ])
        .build();

    if clappers.get_flag("help") {
        println!("
            usage: compile [arguments]

            Arguments:
                -h|--help                        Print this help
                -v|--verbose                     Enable verbose mode
                -I <dir1> ... <dirN>             Include directories
                -L <dir1> ... <dirN>             Library directories
                -i|--input <file1> ... <fileN>   Input filenames
                -o|--output filename             Output filename
        ");
    }

    let output_filename = clappers.get_single("output");
    let input_filenames: Vec<String> = clappers.get_multiple("input");

    // ...
}

参数类型

有四种类型的参数

  1. 标志
  2. 单值
  3. 多值
  4. 剩余

1. 标志参数

如果标志参数在命令行中提供,则为true,否则为false,例如

-h
--help
-v
--verbose

注意:标志参数不接受值

2. 单值参数

如果单值参数在命令行中提供,则包含一个String值,否则为空String,例如

-o filename.txt
--output filename.txt
-u Zelensky
--username Zelensky

3. 多值参数

如果多值参数在命令行中提供,则至少包含一个String值,否则为空String,例如

-i file1.txt
--input file1.txt
--host host1

它们也可以包含多个值,通过在命令行中重复来重复,例如

-i file1.txt -i file2.txt ... -i fileN.txt
--host host1 --host host2 ... --host hostN

以下格式也有效,从第一个值开始读取,直到遇到下一个参数或直到整个命令行参数的末尾,例如

-i file1.txt file2.txt ... fileN.txt -n next_argument
--host host1 host2 hostN

4. 剩余参数

剩余参数值是指命令行中提供的未与任何参数关联的值。这包括

  • 当未提供其他参数类型时,任何值
ls file1 file2... fileN
  • 双破折号参数之后的任何值
ls -l -R  -- file1 file2...  fileN`
  • 提供给标志的任何值,因为标志不接受值

  • 提供给单值参数的任何剩余值,因为这些参数只接受一个值

注意事项

  • 组合标志目前不支持,即以下内容无法工作:
tar -zcf filename.tar.gz *
  • 等于值目前不支持,即以下内容无法工作:
tar -zc --file=filename.tar.gz
  • 具有独立解析器(Clappers)的命令目前不支持,即以下内容无法工作:
apt-get -y install -f cargo
apt-get update -f
  • 命令行参数值始终为String类型。这是设计的一部分,没有计划提供便利函数。要将String转换为其他类型,请使用String的内置parse()函数。
use clappers::Clappers;

fn main() {
    let clappers = Clappers::new()
        .set_singles(vec!["number"])
        .build();

    let number: i32 = clappers.get_single("number").parse().unwrap();

    println!("Double {number} is {}", number * 2);
}

支持

请将任何错误报告或功能请求提交到:

请随意分支存储库并提交拉取请求 :)

荣耀属于乌克兰!

作者

Alfie John <[email protected]>

保修

本产品不提供任何类型的保修。

版权和许可

版权(C)2022 由Alfie John所有。

本程序是自由软件:您可以根据自由软件基金会发布的GNU通用公共许可证和GNU自由文档许可证的条款重新分发和/或修改它,无论是GPL的第3版还是GFDL的第1.3版,或者是您选择的任何后续版本。

本程序的分发是希望它是有用的,但没有提供任何保证;甚至没有对适销性和针对特定用途的适用性的暗示保证。有关详细信息,请参阅GNU通用公共许可证。

您应该已随本程序收到GNU通用公共许可证的副本。如果没有,请参阅https://www.gnu.org/licenses/

无运行时依赖项