4 个版本 (2 个重大更改)
0.3.1 | 2024年5月10日 |
---|---|
0.3.0 | 2024年5月10日 |
0.2.0 | 2024年5月10日 |
0.1.0 | 2024年5月10日 |
#856 在 进程宏
8KB
105 行
只插入集合
insert_only_set
是一个进程宏,用于从Rust中的枚举生成线程安全的只插入集合。底层这个集合是一个具有每个枚举变体的 OnceLock
字段的 struct。
特性
- 自动为任何枚举生成只插入集合
- 使用
OnceLock
实现线程安全的插入 - 遍历已插入的集合变体
示例
use insert_only_set::InsertOnlySet;
#[derive(InsertOnlySet, Debug, PartialEq)]
pub enum Type {
Customer,
Employee,
}
fn main() {
let set = Type::InsertOnlySet();
assert!(!set.contains(Type::Customer));
assert!(!set.contains(Type::Employee));
assert!(set.insert(Type::Customer));
assert!(set.contains(Type::Customer));
assert!(!set.contains(Type::Employee));
assert!(set.insert(Type::Employee));
assert!(set.contains(Type::Customer));
assert!(set.contains(Type::Employee));
// Try to insert again, should return false
assert!(!set.insert(Type::Customer));
for variant in set.iter() {
println!("{:?}", variant);
}
}
依赖项
~1.5MB
~36K SLoC