5 releases
0.2.2 | Jul 25, 2023 |
---|---|
0.2.1 | Jul 25, 2023 |
0.2.0 | Jul 24, 2023 |
0.1.1 | Jul 19, 2023 |
0.1.0 | Jul 19, 2023 |
#1852 in Data structures
5KB
WrappedSlab
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
}
Dependencies
~1.5MB
~39K SLoC