#bad #hack #cursed #macro-derive

accursed-unutterable-type-id

A worse version of std::any::TypeId

4 releases

0.0.1-pre.ohyes Oct 14, 2023
0.0.1-pre.ohno Aug 4, 2022
0.0.0-pre.ohno Jun 18, 2022
0.0.0-pre.cursed Jun 17, 2022

#702 in Rust patterns

MIT license

10KB
71 lines

accursed-unutterable-type-id

An accursed, unutterable type id.

Once upon a time, back when time may not have been a human concept but only a vague idea among the wise, there was std::any::TypeId.

It was a good type, and many of these early inhabitants of planet earth were quite fond of it. Yet, there was a fundamental issue in it, that even the elders were not able to resolve: It required significant magic from the compiler. The peoples back then were no stranger to magic, but even just the thought of having magic in their type ids caused numerous wars among them.

After the last and most brutal of the so called "type-id" wars, one especially clever member of one of the leading clans for type id research had a breakthrough. They found a new method to implement type ids in user code! Even though their method had a significant disadvantage in that it had to be implemented using a derive macro (futuristic technology that the elderly have only dreamt of back then). Yet this change was accepted, and peace among the peoples ensured.

Using it is as simple as slapping a derive macro on your type and then getting the type id using AccursedUnutterableTypeId::of.

use accursed_unutterable_type_id::{AccursedUnutterableTypeId, AccursedUnutterablyTypeIdentified};

#[derive(AccursedUnutterablyTypeIdentified)]
struct Uwu;

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

Dependencies

~2MB
~40K SLoC