#枚举 #集合 #变体 #生成 #进程宏 #过程式 #插入

insert-only-set

一个用于从枚举生成只插入集合的进程宏

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进程宏

MIT/Apache

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