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