Skip to content

Make TryFromBytes a super-trait of FromZeros #962

@jswrenn

Description

@jswrenn

The TryFromBytes derive for unions requires that Self: NoCell, due to the safety obligations of Ptr::project in its implementation of is_bit_valid. By contrast, the derives for FromZeros and FromBytes on unions do not require Self: NoCell.

We would like to make TryFromBytes a super-trait of FromZeros, but (as we discovered in #952) this mismatch in requirements presents us with a trilemma:

  • don't make TryFromBytes a super-trait of FromZeros
  • find a way to remove the NoCell requirements on the TryFromBytes derive for unions
  • propagate the NoCell requirement on unions to the derives for FromZeros and FromBytes

Short-Term Resolution

We:

  • don't formally make TryFromBytes a super-trait of FromZeros, but we document that this relationship may be required in the future
  • propagate the NoCell requirement on unions to the derives for FromZeros and FromBytes

Making FromZeros: TryFromBytes may create future breakage for customers manually implementing FromZeros, but this workflow is explicitly documented as unsupported.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions