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