3个版本 (破坏性更新)
| 0.3.0 | 2024年5月16日 | 
|---|---|
| 0.2.0 | 2024年5月15日 | 
| 0.1.0 | 2024年5月15日 | 
#273 in 过程宏
32KB
666 代码行
bitflag-attr
这是一个Rust过程宏crate,可以将C样式的枚举转换为具有类似bitfields crate API的位标志结构。
您可以使用此crate进行以下操作:
- 提供更友好的C API绑定,其中标志可能或可能无法预先完全了解。
您不能使用此crate来
- 保证只设置定义的标志对应的位。 bitflag-attr允许访问底层的位类型,因此可以设置任意位。
- 定义位字段。 bitflag-attr仅生成表示某些组合标志存在的位设置的类型。
实现的特性
该宏还将实现一些用于位操作和格式化的特性。
- core::ops::Not
- core::ops::BitAnd
- core::ops::BitOr
- core::ops::BitXor
- core::ops::BitAndAssign
- core::ops::BitOrAssign
- core::ops::BitXorAssign
- core::ops::Sub
- core::ops::SubAssign
- core::fmt::Debug
- core::fmt::Binary
- core::fmt::UpperHex
- core::fmt::LowerHex
- core::fmt::Octal
- From
- Clone
- Copy
除了Debug、Clone和Copy特性之外,所有其他可导出的特性都可以与该类型一起使用
示例
生成标志结构
use bitflag_attr::bitflag;
#[bitflag(u32)]
#[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
enum Flags {
    /// The value `A`, at bit position `0`.
    A = 0b00000001,
    /// The value `B`, at bit position `1`.
    B = 0b00000010,
    /// The value `C`, at bit position `2`.
    C = 0b00000100,
    /// The combination of `A`, `B`, and `C`.
    ABC = A | B | C,
}
fn main() {
    let e1 = Flags::A | Flags::C;
    let e2 = Flags::B | Flags::C;
    assert_eq!((e1 | e2), Flags::ABC);   // union
    assert_eq!((e1 & e2), Flags::C);     // intersection
    assert_eq!((e1 - e2), Flags::A);     // set difference
    assert_eq!(!e2, Flags::A);           // set complement
}
Rust版本支持
最低支持的Rust版本在Cargo.toml文件中记录。根据需要,在次要版本中可能需要提高此版本。
依赖项
~265–720KB
~17K SLoC