// Not public API. Use #[derive(RefCastCustom)] and #[ref_cast_custom]. #[doc(hidden)] pub unsafe trait RefCastCustom { type CurrentCrate; fn __static_assert() {} } #[doc(hidden)] pub unsafe trait RefCastOkay: Sealed { type CurrentCrate; type Target: ?Sized; } unsafe impl<'a, From, To> RefCastOkay<&'a From> for &'a To where From: ?Sized, To: ?Sized + RefCastCustom, { type CurrentCrate = To::CurrentCrate; type Target = To; } unsafe impl<'a, From, To> RefCastOkay<&'a mut From> for &'a mut To where From: ?Sized, To: ?Sized + RefCastCustom, { type CurrentCrate = To::CurrentCrate; type Target = To; } #[doc(hidden)] pub trait Sealed {} impl<'a, From, To> Sealed<&'a From> for &'a To where From: ?Sized, To: ?Sized + RefCastCustom, { } impl<'a, From, To> Sealed<&'a mut From> for &'a mut To where From: ?Sized, To: ?Sized + RefCastCustom, { } #[doc(hidden)] pub type CurrentCrate = >::CurrentCrate; #[doc(hidden)] pub fn ref_cast_custom(_arg: From) where To: RefCastOkay, { }