[]Trait safer_ffi::prelude::AsOut

pub trait AsOut<Pointee> where
    Pointee: ?Sized
{ fn as_out(&'out mut self) -> Out<'out, Pointee>; }
This is supported on feature="out-refs" only.

Extension trait to convert a &mut _ into a &out _ by calling .as_out() on it.

By autoref, this means that you can even just extract a &out T reference out of a mut element simply by calling .as_out() on it.

There is, however, one restriction: to be able to call .as_out() on something, it needs to be either Copy, or a value wrapped in a [MaybeUninit] / a [ManuallyDrop].

This is by design. Indeed, Out references do not call the destructor of the overwritten element (since it may not be initialized). This could cause memory leaks when there is an initialized element with drop glue.

To solve this limitation, one must explicitly call .manually_drop_mut() to automagically transmute the &mut _ reference into a &mut ManuallyDrop<_>.

Examples

use ::uninit::prelude::*;

let mut x = 0;
x.as_out().write(42);

let mut y = ::core::mem::MaybeUninit::uninit();
y.as_out().write(42);
let y = unsafe { y.assume_init() };

assert_eq!(x, y);

Required methods

fn as_out(&'out mut self) -> Out<'out, Pointee>

This is supported on feature="out-refs" only.
Loading content...

Implementations on Foreign Types

impl<T> AsOut<[T]> for [T; 64] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 1]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 26]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 52]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 128]

impl<T> AsOut<[T]> for [T; 9] where
    T: Copy

impl<T> AsOut<[T]> for [T; 20] where
    T: Copy

impl<T> AsOut<[T]> for [T; 12] where
    T: Copy

impl<T> AsOut<[T]> for [T; 43] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 33]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 14]

impl<T> AsOut<[T]> for [T; 34] where
    T: Copy

impl<T> AsOut<[T]> for [T; 512] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 30]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 21]

impl<T> AsOut<[T]> for [T; 53] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 8]

impl<T> AsOut<[T]> for [T; 1] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 48]

impl<T> AsOut<[T]> for [T; 44] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 34]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 2]

impl<T> AsOut<[T]> for [T; 3] where
    T: Copy

impl<T> AsOut<[T]> for [ManuallyDrop<T>]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 46]

impl<T> AsOut<[T]> for [T; 30] where
    T: Copy

impl<T> AsOut<[T]> for [T; 52] where
    T: Copy

impl<T> AsOut<[T]> for [T; 24] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 16]

impl<T> AsOut<[T]> for [T; 27] where
    T: Copy

impl<T> AsOut<[T]> for [T; 63] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 43]

impl<T> AsOut<[T]> for [T; 1024] where
    T: Copy

impl<T> AsOut<[T]> for [T; 15] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 50]

impl<T> AsOut<[T]> for [T; 2] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 5]

impl<T> AsOut<[T]> for [T; 17] where
    T: Copy

impl<T> AsOut<[T]> for [T; 46] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 7]

impl<T> AsOut<[T]> for [T; 256] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 53]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 37]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 24]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 41]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 256]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 25]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 51]

impl<T> AsOut<[T]> for [T; 51] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 10]

impl<T> AsOut<[T]> for [T; 39] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 64]

impl<T> AsOut<[T]> for [T; 19] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 44]

impl<T> AsOut<[T]> for [T; 28] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 40]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 54]

impl<T> AsOut<[T]> for [T; 61] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 61]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 45]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 6]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 1024]

impl<T> AsOut<[T]> for [T; 25] where
    T: Copy

impl<T> AsOut<[T]> for [T; 13] where
    T: Copy

impl<T> AsOut<[T]> for [T; 23] where
    T: Copy

impl<T> AsOut<[T]> for [T; 21] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 23]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 62]

impl<T> AsOut<[T]> for [T; 58] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>]

impl<T> AsOut<[T]> for [T; 57] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 19]

impl<T> AsOut<[T]> for [T; 62] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 20]

impl<T> AsOut<[T]> for [T; 32] where
    T: Copy

impl<T> AsOut<[T]> for [T] where
    T: Copy

impl<T> AsOut<[T]> for [T; 48] where
    T: Copy

impl<T> AsOut<[T]> for [T; 10] where
    T: Copy

impl<T> AsOut<[T]> for [T; 49] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 29]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 55]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 512]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 39]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 11]

impl<T> AsOut<[T]> for [T; 45] where
    T: Copy

impl<T> AsOut<[T]> for [T; 7] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 22]

impl<T> AsOut<[T]> for [T; 14] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 60]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 49]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 57]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 28]

impl<T> AsOut<[T]> for [T; 36] where
    T: Copy

impl<T> AsOut<[T]> for [T; 50] where
    T: Copy

impl<T> AsOut<[T]> for [T; 11] where
    T: Copy

impl<T> AsOut<[T]> for [T; 37] where
    T: Copy

impl<T> AsOut<[T]> for [T; 55] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 58]

impl<T> AsOut<[T]> for [T; 38] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 0]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 63]

impl<T> AsOut<[T]> for [T; 18] where
    T: Copy

impl<T> AsOut<[T]> for [T; 22] where
    T: Copy

impl<T> AsOut<[T]> for [T; 6] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 9]

impl<T> AsOut<[T]> for [T; 41] where
    T: Copy

impl<T> AsOut<[T]> for [T; 47] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 17]

impl<T> AsOut<[T]> for [T; 16] where
    T: Copy

impl<T> AsOut<[T]> for [T; 0] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 12]

impl<T> AsOut<[T]> for [T; 33] where
    T: Copy

impl<T> AsOut<[T]> for [T; 42] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 36]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 56]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 31]

impl<T> AsOut<[T]> for [T; 31] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 35]

impl<T> AsOut<[T]> for [T; 54] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 27]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 18]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 4]

impl<T> AsOut<[T]> for [T; 26] where
    T: Copy

impl<T> AsOut<[T]> for [T; 35] where
    T: Copy

impl<T> AsOut<T> for MaybeUninit<T>

impl<T> AsOut<[T]> for [MaybeUninit<T>; 15]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 38]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 47]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 42]

impl<T> AsOut<[T]> for [T; 40] where
    T: Copy

impl<T> AsOut<[T]> for [T; 59] where
    T: Copy

impl<T> AsOut<[T]> for [T; 56] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 32]

impl<T> AsOut<T> for ManuallyDrop<T>

impl<T> AsOut<[T]> for [T; 128] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 3]

impl<T> AsOut<[T]> for [MaybeUninit<T>; 13]

impl<T> AsOut<[T]> for [T; 5] where
    T: Copy

impl<T> AsOut<[T]> for [T; 29] where
    T: Copy

impl<T> AsOut<[T]> for [MaybeUninit<T>; 59]

impl<T> AsOut<[T]> for [T; 8] where
    T: Copy

impl<T> AsOut<[T]> for [T; 4] where
    T: Copy

impl<T> AsOut<[T]> for [T; 60] where
    T: Copy

Loading content...

Implementors

impl<T> AsOut<T> for T where
    T: Copy

Loading content...