1 个不稳定版本
0.2.1 | 2021 年 1 月 12 日 |
---|
#26 在 #user-defined
20KB
211 行代码(不包括注释)
adante
这只是我为我的 Rust 应用程序创建的一个小型参数库。
我开始粘贴太多,所以我就创建了它。
lib.rs
:
adante
adante
是一个简单的库,用于处理用户定义类型,以便在解析命令行参数时提高效率。在核心上,adante
简单地提供了一个接口,通过该接口可以将命令行参数转换成三种类型。
- 标志,包括
- 标志键
- 可选的
String
值
- 动作
- 错误
这是通过实现库中提供的一系列简单但多功能工具来实现的。以下是创建第一个解析器的步骤!
1. 定义一个枚举,其中包含程序可能遇到的所有错误。
这可以与您应用程序的一般 Error 枚举分开,如果您有一个的话,或者它可以相同。
#[derive(Debug, Clone, Copy)] // Highly advised
pub enum ErrorType {
Syntax,
InvalidAction,
InvalidFlag,
NoFlagVal,
}
2. 引入库中的 Error
特征。
use adante::Error;
#[derive(Debug, Clone, Copy)] // Highly advised
pub enum ErrorType {
Syntax,
InvalidAction,
InvalidFlag,
NoFlagVal,
}
impl Error for ErrorType {
fn handle(&self) {
println!("{}", self.as_str());
std::process::exit(1);
}
fn as_str(&self) -> &str {
match self {
Self::Syntax => "Improper syntax usage.",
Self::InvalidAction => "One or more of your actions entered is invalid.",
Self::InvalidFlag => "One or more of your flags entered is invalid",
Self::NoFlagVal => "One or more of your flags is missing a field",
}
}
}
3. 定义一个枚举,其中包含所有标志和动作键。
enum FlagType {
Help,
Verbose,
Print,
}
enum ActionType {
Add,
Remove,
Edit,
}
4. 引入库中的 ArgumentType
特征。
use adante::ArgumentType;
enum FlagType {
Help,
Verbose,
Print,
}
impl ArgumentType for FlagType {
fn from_str<ErrorType>(key: &str, error: ErrorType)
-> Result<Self, ErrorType> {
match key {
"-h" | "--help" => Ok(Self::Help),
"-v" | "--verbose" => Ok(Self::Verbose),
"-p" | "--print" => Ok(Self::Print),
_ => Err(error),
}
}
}
enum ActionType {
Add,
Remove,
Edit,
}
impl ArgumentType for ActionType {
fn from_str<ErrorType>(key: &str, error: ErrorType)
-> Result<Self, ErrorType> {
match key {
"a" | "add" => Ok(Self::Add),
"r" | "remove" => Ok(Self::Remove),
"e" | "edit" => Ok(Self::Edit),
_ => Err(error),
}
}
}
就这样!
现在您的解析器就完成了!通过将 std::env::args::collect()
插入到 Arguments::parse()
中,您将获得一个可工作的 Arguments
对象!