15个版本 (3个重大变更)
新增 3.0.0 | 2024年8月24日 |
---|---|
2.0.0 | 2024年8月24日 |
1.0.0 | 2024年8月24日 |
0.4.1 | 2024年8月24日 |
0.0.2 | 2023年6月11日 |
1610 在 过程宏 中排名
每月下载量834次
在 23 个crate中使用(通过 aargvark)
35KB
735 代码行
一种简单且一致的基于派生的命令行参数解析,与Clap-derive同属一类。目前支持
- 命令行解析
- 帮助
总的来说,这是旨在提供灵活、清晰和一致的命令行解析,而不是为高级用户优化的最小长度解析。
它试图支持解析任意复杂的命令行参数。就像Serde一样,您可以以任何方式组合结构体、vecs、枚举。但仅仅因为您可以,并不意味着您应该。
$ # This is an example help output, sans light ansi styling
$ spagh set -h
Usage: spagh set IDENTITY DATA
IDENTITY: BACKED-IDENTITY-ARG Identity to publish as
DATA: <PATH> | - Data to publish. Must be json in the structure `{KEY: {"ttl": MINUTES, "value": DATA}, ...}`
BACKED-IDENTITY-ARG: local | card
An identity with its associated secret.
local <PATH> A file containing a generated key
card card PC/SC card with ED25519 key
card: PCSC-ID PIN
PCSC-ID: <STRING> Card to register, using id per pcscd (not identity id)
PIN: <STRING> Card pin
$
为什么或为什么不
为什么选择这个而不是Clap?
- 它有一个超级简单的接口(只需在任意枚举/结构体上添加
#[derive(Aargvark)]
即可) - 它可以解析更复杂的数据类型,如子结构的向量或枚举
- 它更一致
为什么不选择这个?
- 为了简化并保持自相似性,一些命令行解析约定被丢弃。毕竟,许多命令行约定都是不一致的或在嵌套东西时会崩溃。
- 奇特的CLI解析通常不支持:一些技巧(如
-v
-vv
-vvv)会破坏模式,可能永远不会实现。(其他事情只是由于缺乏时间还没有实现)
约定和用法
要将它添加到您的项目中,运行
cargo add aargvark
解析命令行参数
-
定义您想要解析它们的数据类型,例如
#[derive(Aargvark)] struct MyArgs { velociraptor: String, deadly: bool, color_pattern: Option<ColorPattern>, }
-
Vark它
let args = aargvark::vark::<MyArgs>();
结构体中的可选字段变为可选参数(--long
)。如果您想使用一个标志,当指定标志时启用(即不带值),请使用 Option<()>
。
您可以派生结构体、枚举和元组,并为 Vec
、HashSet
、Map
(键和值具有 FromString
)提供了实现,作为 K=V
参数,大多数 Ip
和 SocketAddr
类型,以及内置的 PathBuf
。
提供了一些额外的包装器来自动加载(和解析)文件
AargvarkFile<T>
AargvarkJson<T>
需要serde_json
功能。AargvarkYaml<T>
需要serde_yaml
功能。
要解析您自己的类型,实现 AargvarkTrait
,或者如果您的类型只接受单个字符串参数,您可以实现 AargvarkFromStr
,这稍微简单一些。
高级用法
-
Vecs
Vec 元素由空格分隔。Vec 解析的方式是尽可能解析尽可能多的元素。当解析一个元素失败时,它会回滚到最后一个成功解析的元素之后,并从 vec 之后的下一个字段继续。
-
防止在帮助中递归
将
#[vark(break_help)]
添加到 类型、字段 或 变体,以防止在显示帮助时递归到任何子项。这对于子命令枚举很有用 - 将此附加到枚举,它将列出变体,但不会列出变体的参数(除非您在命令行后指定了-h
)。 -
使用标志、替换标志和添加其他标志
例如,将以下内容添加到 字段:
#[vark(flag="--target-machine", flag="-tm")]
如果该字段是可选的,这将替换默认标志。如果字段是非可选的,这将使其需要标志而不是位置参数。
-
重命名枚举变体
例如,将以下内容添加到 变体:
#[vark(name="my-variant")]
-
更改帮助占位符字符串
将
#[vark(placeholder="TARGET-MACHINE")]
添加到 类型、字段 或 变体 中。
依赖关系
~10-22MB
~317K SLoC