#warnings #bitflags #flags #enums

flagged

基于位标志的警告类型

1 个不稳定版本

0.1.0 2024年3月18日

#1291 in Rust 模式

MIT/Apache

7KB
56

flagged

flagged 是一个用于创建 Flagged 值的 Rust 库,即具有相关位标志集合的值。

目的

Flagged 结构体主要用于能够在函数返回值的同时返回相关警告。已经存在一些库可以完成这个任务,如 warnedwresult,但这些库将警告表示为一个 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