ExtendMut

Trait ExtendMut 

Source
pub trait ExtendMut<'b>: Sized {
    type Extended;

    // Required method
    fn extend_mut<R, ER: IntoExtendMutReturn<Self::Extended, R>>(
        self,
        f: impl FnOnce(Self::Extended) -> ER,
    ) -> R;
}
Expand description

Trait designed to allow extending the lifetime of a mutable reference. It does not currently support async, contributions are welcome.

§Examples

use extend_mut::ExtendMut;

let (mut t1, mut t2) = (1, 2);
let () = (t1, t2).extend_mut(|it /*: &'static mut (u8, u8)*/| it);
let () = (&mut t1, &mut t2).extend_mut(|it /*: (&'static mut u8, &'static mut u8)*/| it);
let "hi" = (t1, t2).extend_mut(|it| (it, "hi")) else { panic!() };

Required Associated Types§

Required Methods§

Source

fn extend_mut<R, ER: IntoExtendMutReturn<Self::Extended, R>>( self, f: impl FnOnce(Self::Extended) -> ER, ) -> R

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<'a, 'b, T1: ?Sized + 'b, T2: ?Sized + 'b, T3: ?Sized + 'b, T4: ?Sized + 'b, T5: ?Sized + 'b, T6: ?Sized + 'b, T7: ?Sized + 'b, T8: ?Sized + 'b, T9: ?Sized + 'b, T10: ?Sized + 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T1, &'a mut T2, &'a mut T3, &'a mut T4, &'a mut T5, &'a mut T6, &'a mut T7, &'a mut T8, &'a mut T9, &'a mut T10, &'a mut T11, &'a mut T12, &'a mut T13)

Source§

impl<'a, 'b, T2: ?Sized + 'b, T3: ?Sized + 'b, T4: ?Sized + 'b, T5: ?Sized + 'b, T6: ?Sized + 'b, T7: ?Sized + 'b, T8: ?Sized + 'b, T9: ?Sized + 'b, T10: ?Sized + 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T2, &'a mut T3, &'a mut T4, &'a mut T5, &'a mut T6, &'a mut T7, &'a mut T8, &'a mut T9, &'a mut T10, &'a mut T11, &'a mut T12, &'a mut T13)

Source§

impl<'a, 'b, T3: ?Sized + 'b, T4: ?Sized + 'b, T5: ?Sized + 'b, T6: ?Sized + 'b, T7: ?Sized + 'b, T8: ?Sized + 'b, T9: ?Sized + 'b, T10: ?Sized + 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T3, &'a mut T4, &'a mut T5, &'a mut T6, &'a mut T7, &'a mut T8, &'a mut T9, &'a mut T10, &'a mut T11, &'a mut T12, &'a mut T13)

Source§

impl<'a, 'b, T4: ?Sized + 'b, T5: ?Sized + 'b, T6: ?Sized + 'b, T7: ?Sized + 'b, T8: ?Sized + 'b, T9: ?Sized + 'b, T10: ?Sized + 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T4, &'a mut T5, &'a mut T6, &'a mut T7, &'a mut T8, &'a mut T9, &'a mut T10, &'a mut T11, &'a mut T12, &'a mut T13)

Source§

impl<'a, 'b, T5: ?Sized + 'b, T6: ?Sized + 'b, T7: ?Sized + 'b, T8: ?Sized + 'b, T9: ?Sized + 'b, T10: ?Sized + 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T5, &'a mut T6, &'a mut T7, &'a mut T8, &'a mut T9, &'a mut T10, &'a mut T11, &'a mut T12, &'a mut T13)

Source§

impl<'a, 'b, T6: ?Sized + 'b, T7: ?Sized + 'b, T8: ?Sized + 'b, T9: ?Sized + 'b, T10: ?Sized + 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T6, &'a mut T7, &'a mut T8, &'a mut T9, &'a mut T10, &'a mut T11, &'a mut T12, &'a mut T13)

Source§

impl<'a, 'b, T7: ?Sized + 'b, T8: ?Sized + 'b, T9: ?Sized + 'b, T10: ?Sized + 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T7, &'a mut T8, &'a mut T9, &'a mut T10, &'a mut T11, &'a mut T12, &'a mut T13)

Source§

impl<'a, 'b, T8: ?Sized + 'b, T9: ?Sized + 'b, T10: ?Sized + 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T8, &'a mut T9, &'a mut T10, &'a mut T11, &'a mut T12, &'a mut T13)

Source§

impl<'a, 'b, T9: ?Sized + 'b, T10: ?Sized + 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T9, &'a mut T10, &'a mut T11, &'a mut T12, &'a mut T13)

Source§

impl<'a, 'b, T10: ?Sized + 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T10, &'a mut T11, &'a mut T12, &'a mut T13)

Source§

impl<'a, 'b, T11: ?Sized + 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T11, &'a mut T12, &'a mut T13)

Source§

type Extended = (&'b mut T11, &'b mut T12, &'b mut T13)

Source§

fn extend_mut<R, ER: IntoExtendMutReturn<Self::Extended, R>>( self, f: impl FnOnce(Self::Extended) -> ER, ) -> R

Source§

impl<'a, 'b, T12: ?Sized + 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T12, &'a mut T13)

Source§

type Extended = (&'b mut T12, &'b mut T13)

Source§

fn extend_mut<R, ER: IntoExtendMutReturn<Self::Extended, R>>( self, f: impl FnOnce(Self::Extended) -> ER, ) -> R

Source§

impl<'a, 'b, T13: ?Sized + 'b> ExtendMut<'b> for (&'a mut T13,)

Source§

type Extended = (&'b mut T13,)

Source§

fn extend_mut<R, ER: IntoExtendMutReturn<Self::Extended, R>>( self, f: impl FnOnce(Self::Extended) -> ER, ) -> R

Source§

impl<'a, 'b, T: ?Sized + 'b> ExtendMut<'b> for &'a mut T

Source§

type Extended = &'b mut T

Source§

fn extend_mut<R, ER: IntoExtendMutReturn<Self::Extended, R>>( self, f: impl FnOnce(Self::Extended) -> ER, ) -> R

Source§

impl<'b> ExtendMut<'b> for ()

Source§

type Extended = ()

Source§

fn extend_mut<R, ER: IntoExtendMutReturn<Self::Extended, R>>( self, f: impl FnOnce(Self::Extended) -> ER, ) -> R

Implementors§