wrapped_slab

Crates.iowrapped_slab
lib.rswrapped_slab
version0.4.0
created_at2023-07-19 12:34:49.711401+00
updated_at2025-04-17 10:25:55.514408+00
descriptionWrappedSlab: Auto-generate newtype idiom based on a Slab
homepage
repositoryhttps://github.com/lun3x/wrapped_slab
max_upload_size
id920269
size16,678
Louis Wyborn (lun3x)

documentation

README

WrappedSlab Tests

Also available on crates.io.

Very simple Rust library useful when you want stronger type guarantees than Slab's usize keys. Generates TSlab(Slab<T>) that accepts TKey instead of usize. TVacantEntry(VacantEntry<T>) is also generated along the same lines. This should be a drop-in replacement for Slab<T>, provided all the keys are changed from usize to TKey.

Example

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
}
Commit count: 36

cargo fmt