[][src]Trait uninit::extension_traits::AsOut

pub trait AsOut<Pointee: ?Sized> {
    fn as_out<'out>(&'out mut self) -> Out<'out, Pointee>;
}

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>(&'out mut self) -> Out<'out, Pointee>

Loading content...

Implementations on Foreign Types

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Loading content...

Implementors

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

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

Loading content...