#![allow(clippy::manual_non_exhaustive)] use ref_cast::RefCast; use std::marker::PhantomData; type Marker = PhantomData; #[derive(RefCast)] #[repr(transparent)] pub struct ImplicitUnit { pub value: usize, _private: (), } #[derive(RefCast)] #[repr(transparent)] pub struct ImplicitPhantomData { pub value: T, pub marker: PhantomData, } #[derive(RefCast)] #[repr(transparent)] pub struct ExplicitTrivial { pub value: usize, #[trivial] pub marker: Marker, } #[derive(RefCast)] #[repr(C)] pub struct Override { #[trivial] pub first: PhantomData, pub second: PhantomData, } #[derive(RefCast)] #[repr(transparent)] pub struct Unsized<'a> { pub marker: PhantomData<&'a str>, pub value: str, } #[test] fn test_trivial() { ImplicitUnit::ref_cast(&0); ImplicitPhantomData::ref_cast(&0); ExplicitTrivial::ref_cast(&0); Override::::ref_cast(&PhantomData::); Unsized::ref_cast("..."); }