1 个不稳定版本

0.1.0 2024年1月24日

#978命令行界面

MIT/Apache

63KB
1.5K SLoC

在几分钟内创建一个“功能型”命令行参数解析器。

有关更多详细信息,请参阅 docs.rs


lib.rs:

Fcla 允许您在几分钟内创建一个“功能型”命令行参数解析器。只需从创建一个 Args 类型开始,然后使用 #[derive(FromArgs)] 注释您的类型,最后使用 parse_cla 函数解析您的参数。非常适合小型项目和快速开发。

示例

以下示例展示了 fcla 大多数功能

use fcla::FromArgs;

#[derive(Debug, FromArgs)]
enum Args {
    Simple { first: Box<str>, second: i32 },
    Nested { nested: Nested },
    Optional { optional: Option<Box<str>> },
    Sequence { sequence: Vec<i32> },
    Mapping { map: std::collections::HashMap<i32, Box<str>> },
    Range { range: fcla::RangeDynamic<i32> },
    Custom { tree: Tree<Box<str>> },
    Complex { sequence: Vec<Tree<Box<str>>> },
}

#[derive(Debug, FromArgs)]
struct Nested {
    small: u8,
    medium: u16,
    large: u32,
}

#[derive(Debug, FromArgs)]
enum Tree<T> {
    Root(T),
    Branch { left: Box<Self>, right: Box<Self> },
}

fn main() -> fcla::MainResult<()> {
    let args = fcla::parse_cla::<Args>()?.args;
    println!("{:?}", args);
    Ok(())
}

您可以使用以下参数运行它

  • 简单'helloworld' -1
  • 嵌套128 32768 2147483648
  • 可选,word
  • 可选.
  • 序列, 1 , -1 ,1E3, -0.1E4 .
  • 映射, 4four, 3three, 2two, 1one.
  • 范围,, 0 10
  • 范围.,= 10
  • 自定义分支分支根 hello 根 world 分支根来自分支根 fcla 根.
  • 复杂,分支根嵌套根类型,根示例.

语法

Fcla 的语法可以分为四个主要部分。

派生

派生结构体按它们声明的顺序解析其字段。

派生枚举通过将第一个参数与枚举的变体名称匹配,然后将剩余的参数解析到相应的变体结构体中。

集合

集合被解析为一系列 Option<T>,其中可以有零个或多个 Some,以 None 结尾。 Some 被解析为 ,,而 None 被解析为 .。列表和集合由 T 组成,而映射由 [KeyValue<K, V>] 组成。

有关详细信息,请参阅 Args::as_iter 方法。

数字

数字使用与浮点数相同的语法进行解析,但移除了无穷大和 NaN 的情况。这意味着 0.1e1 将成功解析为 [u32]。

有关详细信息,请参阅 [num] 模块。

定制

定制类型(例如 IpAddr)的解析遵循某些外部语法(对于标准库类型,这通常是它们的 FromStr 实现)。

依赖项

~0.7–1.3MB
~28K SLoC