Skip to main content

Crate typeslot

Crate typeslot 

Source
Expand description

§Typeslot

License Crates.io Downloads Docs CI Discord

Assigns each type a unique usize index at startup, with optional group compartmentalization.

§Usage

use typeslot::prelude::*;

// Define group markers.
struct ElementGroup;
struct ResourceGroup;

// Derive `TypeSlot` on your types.
#[derive(TypeSlot)]
#[slot(ElementGroup)]
struct Horizontal;

#[derive(TypeSlot)]
#[slot(ElementGroup)]
struct Vertical;

#[derive(TypeSlot)]
#[slot(ResourceGroup)]
struct Health;

// A type can belong to multiple groups.
#[derive(TypeSlot)]
#[slot(ElementGroup, ResourceGroup)]
struct Label;

// Call `init_slot` once per group before accessing slots.
// It returns the number of slots assigned in the group.
let element_count = init_slot::<ElementGroup>();
let resource_count = init_slot::<ResourceGroup>();

assert_eq!(element_count, 3); // Horizontal, Vertical, Label
assert_eq!(resource_count, 2); // Health, Label

// Use SlotGroup for ergonomic access without repeating the group type.
let elements = SlotGroup::<ElementGroup>::new();
let resources = SlotGroup::<ResourceGroup>::new();

println!("{}", elements.get::<Horizontal>());
println!("{}", resources.get::<Health>());

// Or use the free functions directly.
println!("{}", slot::<Horizontal, ElementGroup>());
println!("{}", slot::<Health, ResourceGroup>());

§Join the community!

You can join us on the Voxell discord server.

§License

typeslot is dual-licensed under either:

This means you can select the license you prefer! This dual-licensing approach is the de-facto standard in the Rust ecosystem and there are very good reasons to include both.

Modules§

prelude

Structs§

AtomicSlot
A write-once slot for a usize index.
SlotGroup
A zero-sized handle for querying slot indices within group G.
TypeSlotEntry
Registration entry for a type that implements TypeSlot<G> within group G.

Traits§

TypeSlot
A type with a statically assigned slot index within group G.

Functions§

init_slot
Assigns a unique index to each type registered in group G.
slot
Returns the slot index of type T in group G.
try_slot
Returns the slot index of type T in group G, or None if init_slot has not been called for G yet.

Derive Macros§

TypeSlot