2 个不稳定版本
0.2.0 | 2023年6月30日 |
---|---|
0.1.0 | 2021年5月31日 |
21 in #typemap
每月下载量:48
在 typemap-meta 中使用
7KB
56 行
typemap-meta
Enlightware® 软件产品。
概述
这是一个简单的编译时(因此称为 meta)派生宏,用于创建类型到值的映射(因此称为 typemap)。与 typemap
或 type-map
等库相比,这些库在运行时进行查找。静态类型提供了编译时安全性和更快的执行速度,但代价是使用派生宏和泛型。
该库与 no_std
兼容。
用法
要使用此库,首先在您的 Cargo.toml
中添加以下内容:
[dependencies]
typemap-meta = "0.2"
然后,您可以创建一个包含不交错的异构类型的元组结构体,并派生 Typemap
,然后使用 get!
宏(围绕 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);
也提供了可变版本
#[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);
库结构
由于目前过程宏必须在它们自己的库中定义,我们有两个库 typemap-meta
和 typemap-meta-derive
,前者从后者重新导出宏。只有前者需要导入到您的项目中。
许可证
以下任一许可证下授权:
- Apache 许可证 2.0 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
依赖关系
约 1.5MB
约 35K SLoC