3个版本

0.0.3 2024年8月12日
0.0.2 2024年7月14日
0.0.1 2024年7月14日

621解析器实现

Download history 65/week @ 2024-07-08 120/week @ 2024-07-15 2/week @ 2024-07-22 121/week @ 2024-08-12

每月 123 次下载

MIT/Apache

20KB
301

Flager:轻量级命令行参数解析器

Crates.io: https://crates.io/crates/flager

Docs.rs: https://docs.rs/flager/0.0.2/flager/

这是一个Rust库,可以帮助您在应用程序中解析命令行参数。它提供了一种简单灵活的方式来定义标志、解析它们的值以及处理不同类型的参数。

特性

  • 标志:您可以定义具有短名称和长名称的标志,并指定它们是否为必需的或具有默认值。
  • 解析:该库可以自动解析标志的值并将它们转换为所需的数据类型,如 StringPathBufbool 和所有整数类型。
  • 参数处理:该库提供了三种不同的处理参数的方式
    • Remainder:收集标志后的所有剩余参数。
    • SmartRemainder:收集遇到新标志之前的所有参数。
    • Count:收集特定数量的参数。

用法

以下是从examples/01.rs的示例,展示如何使用该库

use std::{path::PathBuf, ops::Range};
use flager::{Flag, Parser, NArgs};

fn main() {
    let parser = Parser::new();

    let flag = Flag::<i32>::new("-f", "--flag")
        .mandatory()
        .default(420)
        .help("A mandatory integer flag");

    println!("Flag: {value}", value = parser.parse(&flag).unwrap());

    ////////////////////////////////////////

    let flag2 = Flag::<PathBuf>::new("-p", "--path")
        .default("default/path".into())
        .help("An optional path flag");

    println!("Path: {path:?}", path = parser.parse_or_default(&flag2));

    ////////////////////////////////////////

    let flag3 = Flag::<String>::new("-a", "--args")
        .help("Multiple arguments");

    println!("Arguments: {args:?}", args = parser.parse_many(&flag3, NArgs::Remainder));

    ////////////////////////////////////////                         ^ You can read about `NArgs` in `nargs.md`.

    let flag4 = Flag::<Range::<usize>>::new("-r", "--range")
        .help("Multiple arguments");

    println!("Ranges: {ranges:?}", ranges = parser.parse_many(&flag4, NArgs::SmartRemainder));
}

在这个例子中,我们定义了三个标志

  • 一个必需的整数标志 -f--flag
  • 一个可选路径标志 -p--path
  • 一个可以接受多个参数的标志 -a--args

然后我们使用解析器来解析这些标志的值并相应地处理参数。

支持类型

该库支持以下数据类型
  • 字符串
  • PathBuf
  • 布尔值
  • isizei8i16i32i64i128
  • usizeu8u16u32u64u128
  • 范围<isize>范围<i8>范围<i16>范围<i32>范围<i64>范围<i128>
  • 范围<usize>范围<u8>范围<u16>范围<u32>范围<u64>范围<u128>

您可以通过向官方仓库创建PR来轻松添加对其他数据类型的支持:https://github.com/rakivo/flag/

无运行时依赖