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