1use pin_utils::{unsafe_pinned, unsafe_unpinned, pin_mut}; 2use std::pin::Pin; 3use std::marker::Unpin; 4 5struct Foo<T1, T2> { 6 field1: T1, 7 field2: T2, 8} 9 10impl<T1, T2> Foo<T1, T2> { 11 unsafe_pinned!(field1: T1); 12 unsafe_unpinned!(field2: T2); 13} 14 15impl<T1: Unpin, T2> Unpin for Foo<T1, T2> {} // Conditional Unpin impl 16 17#[test] 18fn projection() { 19 let foo = Foo { field1: 1, field2: 2 }; 20 pin_mut!(foo); 21 22 let x1: Pin<&mut i32> = foo.as_mut().field1(); 23 assert_eq!(*x1, 1); 24 25 let x2: &mut i32 = foo.as_mut().field2(); 26 assert_eq!(*x2, 2); 27} 28