Trait TempReprMut

Source
pub unsafe trait TempReprMut: TempRepr {
    type Mutable<'a>
       where Self: 'a;

    // Required methods
    unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self;
    fn get_mut(&mut self) -> Self::Mutable<'_>;
    fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>;
}
Expand description

An extension of TempRepr that adds support for mutable references.

If the represented type has no special “mutable” variant, the AlwaysShared marker trait can be used to implement TempReprMut identically to TempRepr.

§Safety

In addition to the requirements of TempRepr, the implementation needs to ensure the following properties.

  • new_temp_mut<'a> followed by get_mut<'b> or get_mut_pinned<'b> must not cause undefined behavior when 'a: 'b and 'b does not overlap with any other lifetime passed to get or get_mut or get_mut_pinned.

  • new_temp_mut<'a> followed by get<'b> must not cause undefined behavior when 'a: 'b and 'b does not overlap with any lifetime passed to get_mut or get_mut_pinned.

  • The pinning projections that are implemented as part of get_mut_pinned in this crate, e.g. for tuples, must be safe when the type is the target of such a projection. (This is usually trivial, and e.g. Option::as_pin_mut already exists in the standard library, but technically it is not automatically the case for tuples at the moment.)

  • The above must also hold if a (legal) cast was applied to the result of new_temp_mut.

Required Associated Types§

Source

type Mutable<'a> where Self: 'a

The type that Self is a temporary representation of. May contain mutable references of lifetime 'a.

Required Methods§

Source

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Converts the given object to a temporary representation without a lifetime parameter.

§Safety

The caller must ensure that the returned object does not outlive the lifetime argument of obj.

(Exception: see the caveat in the safety rules of TempReprMutChk.)

Source

fn get_mut(&mut self) -> Self::Mutable<'_>

Converts from a mutable reference to the temporary representation back to the original type, with a restricted lifetime.

Source

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Like TempReprMut::get_mut, but takes a pinned mutable reference to Self.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl TempReprMut for ()

Source§

type Mutable<'a> = () where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut> TempReprMut for (T0,)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>,) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut> TempReprMut for Either<T0, T1>

Source§

type Mutable<'a> = Either<<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>> where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut> TempReprMut for (T0, T1)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut, T2: TempReprMut> TempReprMut for (T0, T1, T2)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>, <T2 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut, T2: TempReprMut, T3: TempReprMut> TempReprMut for (T0, T1, T2, T3)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>, <T2 as TempReprMut>::Mutable<'a>, <T3 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut, T2: TempReprMut, T3: TempReprMut, T4: TempReprMut> TempReprMut for (T0, T1, T2, T3, T4)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>, <T2 as TempReprMut>::Mutable<'a>, <T3 as TempReprMut>::Mutable<'a>, <T4 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut, T2: TempReprMut, T3: TempReprMut, T4: TempReprMut, T5: TempReprMut> TempReprMut for (T0, T1, T2, T3, T4, T5)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>, <T2 as TempReprMut>::Mutable<'a>, <T3 as TempReprMut>::Mutable<'a>, <T4 as TempReprMut>::Mutable<'a>, <T5 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut, T2: TempReprMut, T3: TempReprMut, T4: TempReprMut, T5: TempReprMut, T6: TempReprMut> TempReprMut for (T0, T1, T2, T3, T4, T5, T6)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>, <T2 as TempReprMut>::Mutable<'a>, <T3 as TempReprMut>::Mutable<'a>, <T4 as TempReprMut>::Mutable<'a>, <T5 as TempReprMut>::Mutable<'a>, <T6 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut, T2: TempReprMut, T3: TempReprMut, T4: TempReprMut, T5: TempReprMut, T6: TempReprMut, T7: TempReprMut> TempReprMut for (T0, T1, T2, T3, T4, T5, T6, T7)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>, <T2 as TempReprMut>::Mutable<'a>, <T3 as TempReprMut>::Mutable<'a>, <T4 as TempReprMut>::Mutable<'a>, <T5 as TempReprMut>::Mutable<'a>, <T6 as TempReprMut>::Mutable<'a>, <T7 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut, T2: TempReprMut, T3: TempReprMut, T4: TempReprMut, T5: TempReprMut, T6: TempReprMut, T7: TempReprMut, T8: TempReprMut> TempReprMut for (T0, T1, T2, T3, T4, T5, T6, T7, T8)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>, <T2 as TempReprMut>::Mutable<'a>, <T3 as TempReprMut>::Mutable<'a>, <T4 as TempReprMut>::Mutable<'a>, <T5 as TempReprMut>::Mutable<'a>, <T6 as TempReprMut>::Mutable<'a>, <T7 as TempReprMut>::Mutable<'a>, <T8 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut, T2: TempReprMut, T3: TempReprMut, T4: TempReprMut, T5: TempReprMut, T6: TempReprMut, T7: TempReprMut, T8: TempReprMut, T9: TempReprMut> TempReprMut for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>, <T2 as TempReprMut>::Mutable<'a>, <T3 as TempReprMut>::Mutable<'a>, <T4 as TempReprMut>::Mutable<'a>, <T5 as TempReprMut>::Mutable<'a>, <T6 as TempReprMut>::Mutable<'a>, <T7 as TempReprMut>::Mutable<'a>, <T8 as TempReprMut>::Mutable<'a>, <T9 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut, T2: TempReprMut, T3: TempReprMut, T4: TempReprMut, T5: TempReprMut, T6: TempReprMut, T7: TempReprMut, T8: TempReprMut, T9: TempReprMut, T10: TempReprMut> TempReprMut for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>, <T2 as TempReprMut>::Mutable<'a>, <T3 as TempReprMut>::Mutable<'a>, <T4 as TempReprMut>::Mutable<'a>, <T5 as TempReprMut>::Mutable<'a>, <T6 as TempReprMut>::Mutable<'a>, <T7 as TempReprMut>::Mutable<'a>, <T8 as TempReprMut>::Mutable<'a>, <T9 as TempReprMut>::Mutable<'a>, <T10 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T0: TempReprMut, T1: TempReprMut, T2: TempReprMut, T3: TempReprMut, T4: TempReprMut, T5: TempReprMut, T6: TempReprMut, T7: TempReprMut, T8: TempReprMut, T9: TempReprMut, T10: TempReprMut, T11: TempReprMut> TempReprMut for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)

Source§

type Mutable<'a> = (<T0 as TempReprMut>::Mutable<'a>, <T1 as TempReprMut>::Mutable<'a>, <T2 as TempReprMut>::Mutable<'a>, <T3 as TempReprMut>::Mutable<'a>, <T4 as TempReprMut>::Mutable<'a>, <T5 as TempReprMut>::Mutable<'a>, <T6 as TempReprMut>::Mutable<'a>, <T7 as TempReprMut>::Mutable<'a>, <T8 as TempReprMut>::Mutable<'a>, <T9 as TempReprMut>::Mutable<'a>, <T10 as TempReprMut>::Mutable<'a>, <T11 as TempReprMut>::Mutable<'a>) where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T: TempReprMut> TempReprMut for Option<T>

Source§

type Mutable<'a> = Option<<T as TempReprMut>::Mutable<'a>> where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T: TempReprMut> TempReprMut for Range<T>

Source§

type Mutable<'a> = Range<<T as TempReprMut>::Mutable<'a>> where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T: TempReprMut> TempReprMut for RangeFrom<T>

Source§

type Mutable<'a> = RangeFrom<<T as TempReprMut>::Mutable<'a>> where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Source§

impl<T: TempReprMut> TempReprMut for RangeTo<T>

Source§

type Mutable<'a> = RangeTo<<T as TempReprMut>::Mutable<'a>> where Self: 'a

Source§

unsafe fn new_temp_mut(obj: Self::Mutable<'_>) -> Self

Source§

fn get_mut(&mut self) -> Self::Mutable<'_>

Source§

fn get_mut_pinned(self: Pin<&mut Self>) -> Self::Mutable<'_>

Implementors§

Source§

impl<T: HasTempReprMut> TempReprMut for MappedTempRepr<T>

Source§

type Mutable<'a> = <T as HasTempReprMut>::Mutable<'a> where Self: 'a

Source§

impl<T: AlwaysShared> TempReprMut for T

Source§

type Mutable<'a> = <T as TempRepr>::Shared<'a> where Self: 'a

Source§

impl<T: ?Sized> TempReprMut for TempRefMut<T>

Source§

type Mutable<'a> = &'a mut T where Self: 'a

Source§

impl<T: ?Sized> TempReprMut for TempRefPin<T>

Source§

type Mutable<'a> = Pin<&'a mut T> where Self: 'a