1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/// Pins a value on the stack. /// /// ``` /// # use pin_utils::pin_mut; /// # use core::pin::Pin; /// # struct Foo {} /// let foo = Foo { /* ... */ }; /// pin_mut!(foo); /// let _: Pin<&mut 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::Pin::new_unchecked(&mut $x) }; )* } }