1 个不稳定版本
0.1.0 | 2024年3月18日 |
---|
#1291 in Rust 模式
7KB
56 行
flagged
flagged
是一个用于创建 Flagged
值的 Rust 库,即具有相关位标志集合的值。
目的
Flagged
结构体主要用于能够在函数返回值的同时返回相关警告。已经存在一些库可以完成这个任务,如 warned
和 wresult
,但这些库将警告表示为一个 Vec
。这意味着每个返回这些警告类型之一的函数调用都必须可能分配一个 Vec
。对于许多用例,这似乎有些过度。这就是创建此库的起因。
安装
flagged
库依赖于 enumflag2
库,因此两者都必须包含在你的 Cargo.toml
文件中
[dependencies]
flagged = "0.1.0"
enumflags2 = "0.7.9"
注意,只要 此问题 仍然开放,flagged
就不能简单地重新导出 enumflags2
库。
另外请注意,由于 enumflags2
仍然具有 0 的大版本号,每次版本更改都可能破坏兼容性。因此,建议使用上述特定版本。
用法
要创建一个标记值,我们首先需要定义一个用于与其一起使用的 BitFlag
类型的 C 风格枚举
#[bitflags]
#[repr(u8)] //bitflags must have an explicit repr
#[derive(Clone, Copy)] //bitflags must impl `Copy`
pub enum ParsingWarning {
TooLong,
TooShort,
InvalidToken,
}
定义完毕后,现在我们可以定义一个返回 Flagged
值的函数
pub fn parse(str: &str) -> Flagged<MyStruct, ParsingWarning> {
//... rest of the fn
Flagged {
value: myStruct,
flags: myFlags,
}
}
然后我们可以访问值、警告,以及对返回的 Flagged
值执行其他操作
let f = parse(&"Hello, World");
//access wrapped value
println!("{}", f.value);
//access flags
if f.flags.contains(ParsingWarning::InvalidToken) {
println!("Invalid character found, ignoring!");
}
//turn into a result and error when any flags are set
assert!(f.flags.to_result().is_err());
//turn into a result and error only when certain flags are set
assert!(f.flags.to_result_against(ParsingWarning::TooShort | ParsingWarning::TooLong).is_err());
请注意,flags
字段是来自 enumflag2
库的 BitFlags
类型,你可以在文档中了解更多信息。
依赖项
~305–750KB
~17K SLoC