use std::marker::PhantomData;
use std::num::NonZeroU32;
#[repr(transparent)]
pub struct Outer<A> {
value: Inner,
_p: PhantomData<fn() -> A>,
}
pub struct Inner {
a: NonZeroU32,
b: u32,
}
pub enum EnumOuter<A> {
First(Outer<A>),
Second(Outer<A>),
}
pub enum EnumInner {
First(Inner),
Second(Inner),
}
impl<'a, A> From<&'a EnumOuter<A>> for &'a EnumInner {
fn from(value: &'a EnumOuter<A>) -> Self {
unsafe { std::mem::transmute(value) }
}
}
Is this a sound usage of mem::transmute?