protobuf/reflect/repeated/transmute.rs
use std::any::TypeId;
pub(crate) fn transmute_mut_if_eq<A: 'static, B: 'static>(a: &mut A) -> Result<&mut B, &mut A> {
if TypeId::of::<A>() == TypeId::of::<B>() {
// SAFETY: we check type before transmuting.
Ok(unsafe { &mut *(a as *mut A as *mut B) })
} else {
Err(a)
}
}
pub(crate) fn transmute_ref_if_eq<A: 'static, B: 'static>(a: &A) -> Result<&B, &A> {
if TypeId::of::<A>() == TypeId::of::<B>() {
// SAFETY: we check type before transmuting.
Ok(unsafe { &*(a as *const A as *const B) })
} else {
Err(a)
}
}