pin_utils

Macro unsafe_unpinned

source
macro_rules! unsafe_unpinned {
    ($f:tt: $t:ty) => { ... };
}
Expand description

An unpinned projection of a struct field.

§Safety

This macro is unsafe because it creates a method that returns a normal non-pin reference to the struct field. It is up to the programmer to ensure that the contained value can be considered not pinned in the current context.

§Example

use pin_utils::unsafe_unpinned;
use std::pin::Pin;

struct Bar;
struct Foo {
    field: Bar,
}

impl Foo {
    unsafe_unpinned!(field: Bar);

    fn baz(mut self: Pin<&mut Self>) {
        let _: &mut Bar = self.field(); // Normal reference to the field
    }
}

Note: borrowing the field multiple times requires using .as_mut() to avoid consuming the Pin.