1 个不稳定版本
| 0.1.0 | 2022 年 5 月 9 日 |
|---|
#80 在 #nightly
每月 下载 25 次
8KB
独特类型
这是一个(目前)仅限 nightly 版本的 crate,它提供了一些用于生成和操作独特和匿名类型的工具。换句话说,这些是不能命名且保证始终与其他类型不同的类型。
此 crate 的主要功能是宏 new!,可用于生成这些类型的类型。
可以使用 Unique trait 在 trait 约束中要求类型由 new! 宏生成。
这些类型可以用来“标记”其他类型,使其具有唯一标识性。
当前实现
当前实现基于以下事实:从 Rust 参考)闭包表达式产生一个具有独特、匿名类型的闭包值,该类型无法写出
基本上,宏 new! 使用闭包的 TypeId,并将其用作“模板”类型的 const 泛型,该类型实现了 Unique trait。
安全性
此方法的主要问题是,为了在宏内部构造,模板类型及其依赖的所有其他类型都必须是公开可见的。
这意味着可以手动声明此类类型,这可能会破坏唯一性保证。
通过要求在安全性部分明确说明的要求来初始化模板类型,以使用 unsafe 代码解决此问题,使其被视为唯一的。
通过在需要更多关注的项目(理论上不应在 crate 之外可见)上使用 #[doc)] 添加额外的保护。