#typemap #macro-derive #meta-programming #type-to-value-map

无 std typemap-meta-derive

一个简单的编译时宏,用于创建类型到值的映射,派生宏库

2 个不稳定版本

0.2.0 2023年6月30日
0.1.0 2021年5月31日

21 in #typemap

每月下载量:48
typemap-meta 中使用

MIT/Apache

7KB
56

typemap-meta

Crates.io Docs.rs Build Status

Enlightware® 软件产品。

概述

这是一个简单的编译时(因此称为 meta)派生宏,用于创建类型到值的映射(因此称为 typemap)。与 typemaptype-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-metatypemap-meta-derive,前者从后者重新导出宏。只有前者需要导入到您的项目中。

许可证

以下任一许可证下授权:

由您选择。

依赖关系

约 1.5MB
约 35K SLoC