Trait munge::Destructure

source ·
pub unsafe trait Destructure: Sized {
    type Underlying: ?Sized;
    type Destructuring: Destructuring;

    // Required method
    fn underlying(&mut self) -> *mut Self::Underlying;
}
Expand description

A type that can be destructured into its constituent parts.

See the crate docs for an example of implementing Destructure and Restructure.

Safety

  • Destructuring must reflect the type of destructuring allowed for the type:
    • Borrow if the type is restructured by creating disjoint borrows of the fields of Underlying.
    • Move if the type may be restructured by moving the fields out of the destructured Underlying.
  • underlying must return a pointer that is non-null, properly aligned, and valid for reads.

Required Associated Types§

source

type Underlying: ?Sized

The underlying type that is destructured.

source

type Destructuring: Destructuring

The type of destructuring to perform.

Required Methods§

source

fn underlying(&mut self) -> *mut Self::Underlying

Returns a mutable pointer to the underlying type.

Implementations on Foreign Types§

source§

impl<T> Destructure for ManuallyDrop<T>

source§

impl<T> Destructure for Cell<T>

source§

impl<'a, T> Destructure for &'a mut MaybeUninit<T>

source§

impl<'a, T: ?Sized> Destructure for &'a UnsafeCell<T>

source§

impl<'a, T> Destructure for &'a MaybeUninit<T>

source§

impl<'a, T: ?Sized> Destructure for &'a Cell<T>

source§

impl<'a, T: ?Sized> Destructure for &'a mut ManuallyDrop<T>

source§

impl<'a, T: ?Sized> Destructure for &'a mut UnsafeCell<T>

source§

impl<T> Destructure for MaybeUninit<T>

source§

impl<T> Destructure for UnsafeCell<T>

source§

impl<'a, T: ?Sized> Destructure for &'a ManuallyDrop<T>

source§

impl<'a, T: ?Sized> Destructure for &'a mut Cell<T>

Implementors§