2 个版本
| 0.1.6 | 2022年5月31日 |
|---|---|
| 0.1.5 | 2022年5月22日 |
#929 in 命令行界面
44KB
767 行
kurisu
通过自定义 derive 宏进行命令行参数解析
有关 derive(Kurisu) 的完整文档,请参阅 kurisu_derive。
解析、验证和使用显示
库鲁斯将这三个概念分开
use kurisu::*;
#[derive(Debug, Kurisu)]
struct Yargs {
knots: usize,
}
fn main() {
let env_vars: Vec<String> = std::env::args().skip(1).collect();
// Will take the string values from the command line and try to parse them and assign
// them to the struct's field. If the flag or option is not present then
// its default type value will be assigned to the struct's field.
// In this case: usize::default()
let args = Yargs::from_args(env_vars);
// Returns an Option<kurisu::arg::Error> or None
let arg_error = kurisu::validate_usage(&args);
// If an error is present `print_usage_error` will std::process::exit()
// with kurisu::ExitCode::USAGE(64) as exit code
mayuri::print_usage_error(&args, arg_error);
// Assuming the application was called like so: `mycli --knots 8`
assert_eq!(args.knots, 8);
}
您可以将其缩短为 kurisu::valid_exit(&args),它结合了 kurisu::validate_usage(&args) 和 mayuri::print_usage_error(&args)。
库鲁斯试图为结构体设置合理的默认值,如果我们以以下结构体为例
struct Yargs {
sinking: bool,
knots: usize,
pirate_ship_name: String
}
字段 pirate_ship_name 将没有短选项 -p,而只有长选项 --pirate-ship-name。字段名称中的字符 _ 将匹配并显示为 -。由于类型为 bool,字段 sinking 将是一个标志。默认值可以通过注解修改,有关更多信息,请参阅 kurisu_derive。
库鲁斯对参数、标志和选项有具体定义。它们绝对不是官方定义,但这就是在这个库中处理它们的方式。
参数
命令行中的一个单词,例如:mycli myargument。也称为位置参数,其中您可以将特定结构体字段定义为特定参数位置。
它们从不以 - 或 -- 开头。支持的结构体字段类型
字符串,PathBuf,usize,isize,f64,bool,
可以定义一个无限位置参数,其中该结构字段值将包含所有位置参数(不包括其他具有特定位置的定义参数)。无限位置参数结构字段类型定义为 Vec<T> 和支持的一种类型。
参数总是必须的。没有方法使它们变为可选。
标志
以 - 或 -- 开头,例如:mycli --my-flag,mycli -f。它们的结构字段类型始终为 bool。它们没有关联的值,例如:mycli -f value 被视为一个跟在后面的参数的标志,除非 -f 被定义为选项。
可以堆叠短标志,例如:mycli -fBc。
也可以有重复的标志,并计算它们的出现次数,例如 mycli -vvv。在这种情况下,结构字段类型为 u8。
标志始终是可选的。没有方法使它们变为必需。
选项
以 - 或 -- 开头,后面跟一个值,例如:mycli --my-option=myvalue,mycli -f myvalue。选项值赋值运算符可以是 = 或 。它们支持与参数相同的类型。
可以有重复的选项,例如:mycli -f one -f=two -f three,在这种情况下,它们的结构字段类型为 Vec<T>,具有有效类型。
选项默认总是可选的,但如果有值,则值总是必需的。可以通过注解 required_if 使选项成为必需,更多详细信息请参阅 kurisu_derive。
许可:MIT OR Apache-2.0
依赖项
~1.7–2.5MB
~48K SLoC