@@ -22,12 +22,14 @@ pub use {
2222 ptr:: Ptr ,
2323} ;
2424
25+ use crate :: wrappers:: ReadOnly ;
26+
2527/// A shorthand for a maybe-valid, maybe-aligned reference. Used as the argument
2628/// to [`TryFromBytes::is_bit_valid`].
2729///
2830/// [`TryFromBytes::is_bit_valid`]: crate::TryFromBytes::is_bit_valid
2931pub type Maybe < ' a , T , Aliasing = invariant:: Shared , Alignment = invariant:: Unaligned > =
30- Ptr < ' a , T , ( Aliasing , Alignment , invariant:: Initialized ) > ;
32+ Ptr < ' a , ReadOnly < T > , ( Aliasing , Alignment , invariant:: Initialized ) > ;
3133
3234/// Checks if the referent is zeroed.
3335pub ( crate ) fn is_zeroed < T , I > ( ptr : Ptr < ' _ , T , I > ) -> bool
@@ -338,28 +340,18 @@ pub mod cast {
338340 type WrappedField = Wrapping < F > ;
339341 }
340342
341- #[ allow( missing_debug_implementations, missing_copy_implementations) ]
342- pub struct WrappedProjection < W : ?Sized , F , const VARIANT_ID : i128 , const FIELD_ID : i128 > {
343- _never : core:: convert:: Infallible ,
344- _phantom : PhantomData < ( F , W ) > ,
345- }
346-
347- // SAFETY: TODO
348- unsafe impl < W : ?Sized , F , const VARIANT_ID : i128 , const FIELD_ID : i128 >
349- Project < W , W :: WrappedField > for WrappedProjection < W , F , VARIANT_ID , FIELD_ID >
350- where
351- W : Wrapped
352- + HasWrappedField < <<W as Wrapped >:: Unwrapped as HasField < F , VARIANT_ID , FIELD_ID > >:: Type > ,
353- W :: Unwrapped : HasField < F , VARIANT_ID , FIELD_ID > ,
354- {
355- #[ inline( always) ]
356- fn project_inner ( src : PtrInner < ' _ , W > ) -> * mut W :: WrappedField {
357- src. project :: < _ , W :: CastToUnwrapped > ( )
358- . project :: < _ , Projection < F , VARIANT_ID , FIELD_ID > > ( )
359- . project :: < _ , <W :: WrappedField as Wrapped >:: CastFromUnwrapped > ( )
360- . as_ptr ( )
361- }
362- }
343+ pub type WrappedProjection < W , F , const VARIANT_ID : i128 , const FIELD_ID : i128 > =
344+ TransitiveProject <
345+ <<W as Wrapped >:: Unwrapped as HasField < F , VARIANT_ID , FIELD_ID > >:: Type ,
346+ TransitiveProject <
347+ <W as Wrapped >:: Unwrapped ,
348+ <W as Wrapped >:: CastToUnwrapped ,
349+ Projection < F , VARIANT_ID , FIELD_ID > ,
350+ > ,
351+ <<W as HasWrappedField <
352+ <<W as Wrapped >:: Unwrapped as HasField < F , VARIANT_ID , FIELD_ID > >:: Type ,
353+ > >:: WrappedField as Wrapped >:: CastFromUnwrapped ,
354+ > ;
363355
364356 /// A transitive sequence of projections.
365357 ///
0 commit comments