typeslot 0.1.0

Statically assigned slot indices for types, grouped by a marker type.
Documentation

Typeslot

License Crates.io Downloads Docs CI Discord

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

Usage

use typeslot::TypeSlot;

// 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 once per group before accessing slots.
// It returns the number of slots assigned in the group.
let element_count = typeslot::init::<ElementGroup>();
let resource_count = typeslot::init::<ResourceGroup>();

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

// Each group has its own independent index space.
println!("{:?}", <Horizontal as TypeSlot<ElementGroup>>::slot());
println!("{:?}", <Health as TypeSlot<ResourceGroup>>::slot());

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.