1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
pub use std::borrow::Cow;
#[derive(Hash, Debug, PartialEq, Eq, Clone)]
pub struct TypeId(TypeIdInner);
impl TypeId {
pub fn for_type<T: 'static + ?Sized>() -> Self {
TypeId(TypeIdInner::Type(std::any::TypeId::of::<T>()))
}
pub fn for_variant<T, S>(variant_name: S) -> Self
where
T: 'static + ?Sized,
S: Into<Cow<'static, str>>,
{
TypeId(TypeIdInner::Variant {
parent_enum: std::any::TypeId::of::<T>(),
variant_name: variant_name.into(),
})
}
}
#[derive(Hash, Debug, PartialEq, Eq, Clone)]
pub(super) enum TypeIdInner {
Type(std::any::TypeId),
Variant {
parent_enum: std::any::TypeId,
variant_name: Cow<'static, str>,
},
}