4 个版本 (2 个重大更新)
0.3.1 | 2023年6月25日 |
---|---|
0.3.0 | 2023年6月24日 |
0.2.0 | 2021年4月13日 |
0.1.0 | 2020年9月18日 |
#2 in #trivial
每月下载量29
45KB
893 行
trivial-argument-parser
这个crate是在一个小型的私有项目中创建的。它最初是一个小型库,目的是作为作者的测试平台。从那时起,没有真正发生变化,因为没有引入有价值的改进。最近,我重新回到了这个crate,引入了版本0.3.0,其中更改大幅改变了其开发方式。希望我会花更多时间在这个项目上,这样它就不会看起来像一堆被遗弃的混乱。
用法
使用 Rust 编写的简单参数解析器。它提供了一种简单的方法来定义和解析命令行参数。示例应用程序在版本0.3.0中使用此库。
use trivial_argument_parser::{
args_to_string_vector,
argument::{
parsable_argument::ParsableValueArgument,
ArgumentIdentification
},
ArgumentList,
};
fn main() {
let mut args_list = ArgumentList::new();
let mut argument_int = ParsableValueArgument::new_integer(
ArgumentIdentification::Short('n')
);
let mut argument_str =
ParsableValueArgument::new_string(
ArgumentIdentification::Long(String::from("path"))
);
args_list.register_parsable(&mut argument_int);
args_list.register_parsable(&mut argument_str);
args_list
.parse_args(args_to_string_vector(std::env::args()))
.unwrap();
println!("n - {}", argument_int.first_value().unwrap());
println!("path - {}", argument_str.first_value().unwrap());
}
运行此代码并传递参数
cargo run -- -n 131 --path abc
> n - 131
> path - abc
定义自己的参数处理器
您可以通过使用关联函数ParsableValueArgument::new来定义自己的处理器。您需要指定如何通过遍历输入迭代器来处理参数值(它可以通过调用next()获取一个或多个值,或者可以通过它来设置一个标志)。输入迭代器是可查看的,可以用于更复杂的控制。如果需要保存参数的值,则处理器必须使用提供的可变借用值向量(处理器可以决定是否可以保存多个值)。已定义的参数处理器的示例 - 预定义整数参数处理器
let handler = |input_iter: &mut Peekable<&mut std::slice::Iter<'_, String>>,
values: &mut Vec<i64>| {
if let Option::Some(v) = input_iter.next() {
let validation = ParsableValueArgument::validate_integer(v);
if let Option::Some(err) = validation {
return Result::Err(err);
}
match v.parse() {
Result::Ok(v) => {
values.push(v);
Ok(())
}
Result::Err(err) => Result::Err(format!("{}", err)),
}
} else {
Result::Err(String::from("No remaining input values."))
}
};
ParsableValueArgument::new(identification, handler)
此库的未来
尽管这个crate的开发进展缓慢,但也有一些计划添加更多功能。最大的目标是引入宏来从结构中定义参数。除此之外,还有一些代码部分可以改进。考虑到遗留API现在已经没有用了,所以我打算摆脱它。