xref: /third_party/rust/crates/pin-utils/tests/projection.rs
  • Home
  • History
  • Annotate Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /third_party/rust/crates/pin-utils/tests/
160b26363Sopenharmony_ciuse pin_utils::{unsafe_pinned, unsafe_unpinned, pin_mut};
260b26363Sopenharmony_ciuse std::pin::Pin;
360b26363Sopenharmony_ciuse std::marker::Unpin;
460b26363Sopenharmony_ci
560b26363Sopenharmony_cistruct Foo<T1, T2> {
660b26363Sopenharmony_ci    field1: T1,
760b26363Sopenharmony_ci    field2: T2,
860b26363Sopenharmony_ci}
960b26363Sopenharmony_ci
1060b26363Sopenharmony_ciimpl<T1, T2> Foo<T1, T2> {
1160b26363Sopenharmony_ci    unsafe_pinned!(field1: T1);
1260b26363Sopenharmony_ci    unsafe_unpinned!(field2: T2);
1360b26363Sopenharmony_ci}
1460b26363Sopenharmony_ci
1560b26363Sopenharmony_ciimpl<T1: Unpin, T2> Unpin for Foo<T1, T2> {} // Conditional Unpin impl
1660b26363Sopenharmony_ci
1760b26363Sopenharmony_ci#[test]
1860b26363Sopenharmony_cifn projection() {
1960b26363Sopenharmony_ci    let foo = Foo { field1: 1, field2: 2 };
2060b26363Sopenharmony_ci    pin_mut!(foo);
2160b26363Sopenharmony_ci
2260b26363Sopenharmony_ci    let x1: Pin<&mut i32> = foo.as_mut().field1();
2360b26363Sopenharmony_ci    assert_eq!(*x1, 1);
2460b26363Sopenharmony_ci
2560b26363Sopenharmony_ci    let x2: &mut i32 = foo.as_mut().field2();
2660b26363Sopenharmony_ci    assert_eq!(*x2, 2);
2760b26363Sopenharmony_ci}
28

Indexes created Thu Nov 07 10:32:03 CST 2024