| 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 | |