pin_utils/
stack_pin.rs

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]
14macro_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}