use static_str_ops::*;
pub trait TypeName {
fn typename() -> &'static str
where
Self: Sized,
{
return staticize_once!(std::any::type_name::<Self>());
}
}
pub fn typename<T: TypeName>() -> &'static str {
return T::typename();
}
#[macro_export]
macro_rules! impl_typename {
($t:ty, $name:expr) => {
impl TypeName for $t {
fn typename() -> &'static str {
return $name;
}
}
};
}
pub use impl_typename;
impl_typename!(i8, "int8");
impl_typename!(u8, "uint8");
impl_typename!(i16, "int16");
impl_typename!(u16, "uint16");
impl_typename!(i32, "int");
impl_typename!(u32, "uint");
impl_typename!(i64, "int64");
impl_typename!(u64, "uint64");
impl_typename!(f32, "float");
impl_typename!(f64, "double");
impl_typename!(bool, "bool");
impl_typename!(String, "std::string");