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