use pin_utils::{unsafe_pinned, unsafe_unpinned, pin_mut}; use std::pin::Pin; use std::marker::Unpin; struct Foo { field1: T1, field2: T2, } impl Foo { unsafe_pinned!(field1: T1); unsafe_unpinned!(field2: T2); } impl Unpin for Foo {} // Conditional Unpin impl #[test] fn projection() { let foo = Foo { field1: 1, field2: 2 }; pin_mut!(foo); let x1: Pin<&mut i32> = foo.as_mut().field1(); assert_eq!(*x1, 1); let x2: &mut i32 = foo.as_mut().field2(); assert_eq!(*x2, 2); }