#![warn(rust_2018_idioms, single_use_lifetimes)] #![allow(dead_code)] #[macro_use] mod auxiliary; pub mod default { use pin_project::pin_project; use std::marker::PhantomPinned; struct Inner { f: T, } assert_unpin!(Inner<()>); assert_not_unpin!(Inner); #[pin_project] struct Struct { #[pin] f1: Inner, f2: U, } assert_unpin!(Struct<(), ()>); assert_unpin!(Struct<(), PhantomPinned>); assert_not_unpin!(Struct); assert_not_unpin!(Struct); #[pin_project(project = EnumProj, project_ref = EnumProjRef)] enum Enum { V1 { #[pin] f1: Inner, f2: U, }, } assert_unpin!(Enum<(), ()>); assert_unpin!(Enum<(), PhantomPinned>); assert_not_unpin!(Enum); assert_not_unpin!(Enum); #[pin_project] struct TrivialBounds { #[pin] f: PhantomPinned, } assert_not_unpin!(TrivialBounds); #[pin_project] struct PinRef<'a, T, U> { #[pin] f1: &'a mut Inner, f2: U, } assert_unpin!(PinRef<'_, PhantomPinned, PhantomPinned>); } pub mod cfg { use pin_project::pin_project; use std::marker::PhantomPinned; #[pin_project] struct Foo { #[cfg(any())] #[pin] f: T, #[cfg(not(any()))] f: T, } assert_unpin!(Foo); #[pin_project] struct Bar { #[cfg(any())] f: T, #[cfg(not(any()))] #[pin] f: T, } assert_unpin!(Bar<()>); assert_not_unpin!(Bar); } pub mod cfg_attr { use pin_project::pin_project; use std::marker::PhantomPinned; #[cfg_attr(any(), pin_project)] struct Foo { f: T, } assert_unpin!(Foo<()>); assert_not_unpin!(Foo); #[cfg_attr(not(any()), pin_project)] struct Bar { #[cfg_attr(not(any()), pin)] f: T, } assert_unpin!(Bar<()>); assert_not_unpin!(Bar); } // pin_project(!Unpin) pub mod not_unpin { use pin_project::pin_project; use std::marker::PhantomPinned; struct Inner { f: T, } #[pin_project(!Unpin)] struct Struct { #[pin] inner: Inner, other: U, } assert_not_unpin!(Struct<(), ()>); assert_not_unpin!(Struct<(), PhantomPinned>); assert_not_unpin!(Struct); assert_not_unpin!(Struct); #[pin_project(!Unpin)] struct TrivialBounds { #[pin] f: PhantomPinned, } assert_not_unpin!(TrivialBounds); #[pin_project(!Unpin)] struct PinRef<'a, T, U> { #[pin] inner: &'a mut Inner, other: U, } assert_not_unpin!(PinRef<'_, (), ()>); }