#slab #auto-generate #newtype #derive #wrapped-slab #idiom

wrapped_slab_derive

WrappedSlab:基于Slab自动生成newtype惯用法

5个版本

0.2.2 2023年7月25日
0.2.1 2023年7月25日
0.2.0 2023年7月24日
0.1.1 2023年7月19日
0.1.0 2023年7月19日

#46 in #slab

34次每月下载
用于 wrapped_slab

MIT 许可证

13KB
209

WrappedSlab Tests

也在crates.io上可用。

非常简单的Rust库,当您希望比Slab的usize键提供更强的类型保证时很有用。生成接受TKey而不是usizeTSlab(Slab<T>)。同样,还会生成TVacantEntry(VacantEntry<T>)。这应该是一个Slab<T>的即插即用替换,前提是将所有键从usize更改为TKey

示例

use wrapped_slab::WrappedSlab;

#[derive(WrappedSlab)]
struct TestUnitStruct(String);

fn main() {
    let mut slab = TestUnitStructSlab::default();
    let key: TestUnitStructKey = slab.insert(TestUnitStruct("testing".into()));
    let val: Option<&TestUnitStruct> = slab.get(key);
    let next_entry: TestUnitStructVacantEntry = slab.vacant_entry();
    let next_key: TestUnitStructKey = next_entry.key();
    let next_entry_ref: &mut TestUnitStruct = next_entry.insert(TestUnitStruct(format!("{next_key:?}")));

    // See wrapped_slab/tests/ for more examples
}

依赖关系

~1.5MB
~36K SLoC