1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/// Pins a value on the stack. /// /// ``` /// # #![feature(pin)] /// # use pin_utils::pin_mut; /// # use core::pin::PinMut; /// # struct Foo {} /// let foo = Foo { /* ... */ }; /// pin_mut!(foo); /// let _: PinMut<Foo> = foo; /// ``` #[macro_export] macro_rules! pin_mut { ($($x:ident),*) => { $( // Move the value to ensure that it is owned let mut $x = $x; // Shadow the original binding so that it can't be directly accessed // ever again. #[allow(unused_mut)] let mut $x = unsafe { $crate::core_reexport::pin::PinMut::new_unchecked(&mut $x) }; )* } }