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>,
},
}