Print TypeId as a u128 for Debug

Since <https://github.com/rust-lang/rust/pull/121358>, `TypeId` is
represented as a `(u64, u64)`. This also made the debug implementation a
lot larger, which is especially apparent with pretty formatting.

Make this less noisy by converting the inner value back to a `u128` then
printing as a tuple struct.

Current:

    TypeId { t: (1403077013027291752, 4518903163082958039) }
    TypeId {
        t: (
            1403077013027291752,
            4518903163082958039,
        ),
    }

New:

    TypeId(25882202575019293479932656973818029271)
    TypeId(
        25882202575019293479932656973818029271,
    )
This commit is contained in:
Trevor Gross 2024-06-29 16:14:34 -04:00
parent d1b7355d3d
commit 682e7c1174

View file

@ -602,7 +602,7 @@ pub unsafe fn downcast_mut_unchecked<T: Any>(&mut self) -> &mut T {
/// While `TypeId` implements `Hash`, `PartialOrd`, and `Ord`, it is worth
/// noting that the hashes and ordering will vary between Rust releases. Beware
/// of relying on them inside of your code!
#[derive(Clone, Copy, Debug, Eq, PartialOrd, Ord)]
#[derive(Clone, Copy, Eq, PartialOrd, Ord)]
#[stable(feature = "rust1", since = "1.0.0")]
pub struct TypeId {
// We avoid using `u128` because that imposes higher alignment requirements on many platforms.
@ -644,6 +644,10 @@ pub const fn of<T: ?Sized + 'static>() -> TypeId {
let t2 = t as u64;
TypeId { t: (t1, t2) }
}
fn as_u128(self) -> u128 {
u128::from(self.t.0) << 64 | u128::from(self.t.1)
}
}
#[stable(feature = "rust1", since = "1.0.0")]
@ -666,6 +670,13 @@ fn hash<H: hash::Hasher>(&self, state: &mut H) {
}
}
#[stable(feature = "rust1", since = "1.0.0")]
impl fmt::Debug for TypeId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
f.debug_tuple("TypeId").field(&self.as_u128()).finish()
}
}
/// Returns the name of a type as a string slice.
///
/// # Note