Description
openedon Apr 18, 2024
See also: #1359
Consider Ptr::transparent_wrapper_into_inner
:
Lines 609 to 627 in be56a3a
Currently, if the validity invariant is Initialized
and the validity variance is Invariant
, the returned pointer will have the validity invariant Any
. However, this throws away information: regardless of the specific validity requirements of a type, if all of the outer type's bytes are initialized, then the same is true of the inner type's bytes. In other words, the Initialized
validity invariant should be preserved regardless of the validity variance.
In the general case, what we really need is the ability to express a generic mapping (Invariant, Variance) -> Invariant
, which would allow us to express this behavior.
In other conversion functions, each invariant can be mapped as either:
- Preserve the invariant
- Map to a fixed invariant
These conversion functions could similarly benefit from a generic mapping Invariant -> Invariant
.