Crate typemap_core

Source
Expand description

A no_std typemap with trait-based value-presence guarantees (on nightly)

aka: A map from a type to a value of that type, without needing std/alloc

§Example

use typemap_core::{typemap, Contains, TypeMapGet};

fn uses_options<Opts: Contains<&'static str> + Contains<u32>>(opts: &Opts) {
    println!("str: \"{}\", u32: {}", opts.get::<&str>(), opts.get::<u32>());
}

let options = typemap!(u128 = 34u128, &str = "Hello, world!", u32 = 45u32);
uses_options(&options);

§Nightly

Nightly is not required to use this library, but it is reccomended to at least check your code on nightly occasionally given the nature of the Contains<T> and ContainsMut<T> traits. On nightly, these traits ensure that you can only call the methods that panic when they are guaranteed not to panic. On stable, we can’t implement it properly, so it merely has a blanket impl so that your trait bounds setup for nightly do not cause issues on stable.

Macros§

typemap
Helper for creating a value of a typemap.
typemap_ty
Helper for expressing the type of a typemap.

Structs§

Ty
A type-level linked-list implementation of a typemap
TyEnd
The end of a typemap.

Traits§

Contains
The Contains trait marks a map as containing at least one instance of a given type that can be accessed
ContainsMut
The ContainsMut trait marks a map as containing at least one instance of a given type that can be mutated
TypeMapGet
The TypeMapGet trait allows for obtaining values of types from a typemap.
TypeMapSet
The TypeMapSet trait allows for setting values of types in a typemap.