#slab #key #newtype #replace #generate #guarantees #auto-generate

wrapped_slab

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日

1630 in 数据结构

Download history 1/week @ 2024-04-08 110/week @ 2024-04-22 22/week @ 2024-05-27 8/week @ 2024-06-03 20/week @ 2024-06-10 2/week @ 2024-06-17 70/week @ 2024-07-01 23/week @ 2024-07-22

93 monthly downloads

MIT许可协议

5KB

WrappedSlab Tests

同时在crates.io上可用。

非常简单的Rust库,当您想要比Slab的usize键更强的类型保证时很有用。生成接受TKey而不是usizeTSlab(Slab<T>)。同样还生成了TVacantEntry(VacantEntry<T>)。如果所有键都将usize更改为TKey,则应将其用作Slab<T>的替换。

示例

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
~37K SLoC