Crates.io | typemap-meta |
lib.rs | typemap-meta |
version | 0.2.0 |
source | src |
created_at | 2021-05-31 16:26:12.918113 |
updated_at | 2023-06-30 07:28:38.188777 |
description | A simple compile-time macro to create type-to-value maps |
homepage | https://github.com/enlightware/typemap-meta |
repository | https://github.com/enlightware/typemap-meta |
max_upload_size | |
id | 404307 |
size | 28,108 |
A simple compile-time (hence the meta) derive macro to create type-to-value maps (hence the typemap).
This approach in contrast to crates such as typemap
or type-map
that perform run-time lookup.
The static typing brings compile-time safety and faster execution at the expense of using a derive macro and generics.
The crate is no_std
compatible.
To use this crate, first add this to your Cargo.toml
:
[dependencies]
typemap-meta = "0.2"
Then, you can create a tuple struct containing disjoint heterogeneous types, and derive Typemap
, and then use the get!
macro (a syntactic sugar around Typemap::Get
):
#[derive(Typemap)]
struct Test(i32, f32);
let t = Test(1, 2.0);
assert_eq!(*get!(t, i32), 1);
assert_eq!(*get!(t, f32), 2.0);
A mutable version is also available:
#[derive(Typemap)]
#[typemap_mut]
struct Test(i32, f32);
let mut t = Test(1, 2.0);
*get_mut!(t, i32) = 3;
*get_mut!(t, f32) = 4.0;
assert_eq!(*get!(t, i32), 3);
assert_eq!(*get!(t, f32), 4.0);
As currently procedural macros must be defined in their own crate, we have two crates typemap-meta
and typemap-meta-derive
, the former re-exporting the macro from the later.
Only the former needs to be imported in your project.
Licensed under either of
at your option.