24个版本 (4个重大更改)
新 0.4.4 | 2024年8月24日 |
---|---|
0.3.0 | 2024年7月21日 |
0.2.0 | 2024年3月18日 |
0.0.7 | 2023年12月26日 |
0.0.4 | 2023年7月5日 |
#115 in 命令行界面
每月774次下载
在 22 个crate(直接使用4个) 中使用
40KB
922 行代码(不包括注释)
Aargvark 是一个简单且一致的基于 derive 的命令行参数解析工具,与 Clap-derive 同属一类。它目前支持
- 命令行解析
- 帮助
一般来说,这是为了提供灵活、清晰和一致的命令行解析,而不是针对高级用户的优化最小长度解析。
它试图支持任意复杂的命令行参数解析。就像 Serde 一样,您可以以任何方式组合结构体、vec 和枚举。但仅仅因为您能够做到,并不意味着您应该这样做。
$ # 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>, }
-
变体它
let args = aargvark::vark::<MyArgs>();
结构体中的可选字段变为可选参数(--long
)。如果您想使用一个在指定时启用的 bool
标志(即不取值),请使用 Option<()>
。
您可以派生结构体、枚举和元组,并且有 Vec
、HashSet
、Map
的实现,其中键和值是作为 K=V
参数的 FromString
,以及大多数 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")]
到 类型、字段 或 变体。
依赖关系
~13-24MB
~371K SLoC