#bad #hack #cursed #macro-derive

accursed-unutterable-type-id

std::any::TypeId 的一个更糟糕版本

4 个版本

0.0.1-pre.ohyes2023 年 10 月 14 日
0.0.1-pre.ohno2022 年 8 月 4 日
0.0.0-pre.ohno2022 年 6 月 18 日
0.0.0-pre.cursed2022 年 6 月 17 日

#671 in Rust 模式

MIT 许可证

10KB
71 代码行

accursed-unutterable-type-id

一个诅咒的、不可言说的类型 ID。

很久以前,当时间可能还不是人类概念,而只是智者之间的一种模糊想法时,就有了 std::any::TypeId

它是一个很好的类型,这些早期地球居民都非常喜欢它。然而,它有一个基本问题,即使是长者也无法解决:它需要编译器的大量魔法。那时的民众并不陌生于魔法,但仅仅想到在他们的类型 ID 中使用魔法就引起了他们之间无数的战争。

在所谓的“类型 ID 战争”的最后和最残酷的战争之后,一个特别聪明的族长之一取得了突破。他们找到了一种在用户代码中实现类型 ID 的新方法!尽管他们的方法有一个显著的缺点,即必须使用 derive 宏(那时的老人只能梦想的技术)。然而,这一变化被接受了,人民之间的和平得到了保证。

使用它就像在你的类型上贴一个 derive 宏,然后使用 AccursedUnutterableTypeId::of 获取类型 ID 一样简单。

use accursed_unutterable_type_id::{AccursedUnutterableTypeId, AccursedUnutterablyTypeIdentified};

#[derive(AccursedUnutterablyTypeIdentified)]
struct Uwu;

let type_id = AccursedUnutterableTypeId::of::<Uwu>();
println!("{type_id:?}")

依赖关系

~1.2–1.7MB
~37K SLoC