// SPDX-License-Identifier: Apache-2.0 OR MIT // default #[pin_project], PinnedDrop, project_replace, !Unpin, and UnsafeUnpin without UnsafeUnpin impl are completely safe. /// Testing default struct. #[allow(clippy::exhaustive_structs)] // for the type itself #[::pin_project::pin_project] #[derive(Debug)] pub struct DefaultStruct { /// Pinned field. #[pin] pub pinned: T, /// Unpinned field. pub unpinned: U, } /// Testing named struct. #[::pin_project::pin_project( project = DefaultStructNamedProj, project_ref = DefaultStructNamedProjRef, )] #[derive(Debug)] #[allow(clippy::exhaustive_structs)] // for the type itself pub struct DefaultStructNamed { /// Pinned field. #[pin] pub pinned: T, /// Unpinned field. pub unpinned: U, } /// Testing default tuple struct. #[::pin_project::pin_project] #[allow(clippy::exhaustive_structs)] // for the type itself #[derive(Debug)] pub struct DefaultTupleStruct(#[pin] pub T, pub U); /// Testing named tuple struct. #[::pin_project::pin_project( project = DefaultTupleStructNamedProj, project_ref = DefaultTupleStructNamedProjRef, )] #[allow(clippy::exhaustive_structs)] // for the type itself #[derive(Debug)] pub struct DefaultTupleStructNamed(#[pin] pub T, pub U); /// Testing enum. #[allow(clippy::exhaustive_enums)] // for the type itself #[::pin_project::pin_project( project = DefaultEnumProj, project_ref = DefaultEnumProjRef, )] #[derive(Debug)] pub enum DefaultEnum { /// Struct variant. Struct { /// Pinned field. #[pin] pinned: T, /// Unpinned field. unpinned: U, }, /// Tuple variant. Tuple(#[pin] T, U), /// Unit variant. Unit, } /// Testing pinned drop struct. #[allow(clippy::exhaustive_structs)] // for the type itself #[::pin_project::pin_project(PinnedDrop)] #[derive(Debug)] pub struct PinnedDropStruct { /// Pinned field. #[pin] pub pinned: T, /// Unpinned field. pub unpinned: U, } #[::pin_project::pinned_drop] impl PinnedDrop for PinnedDropStruct { #[allow(clippy::absolute_paths)] fn drop(self: ::pin_project::__private::Pin<&mut Self>) {} } /// Testing pinned drop tuple struct. #[allow(clippy::exhaustive_structs)] // for the type itself #[::pin_project::pin_project(PinnedDrop)] #[derive(Debug)] pub struct PinnedDropTupleStruct(#[pin] pub T, pub U); #[::pin_project::pinned_drop] impl PinnedDrop for PinnedDropTupleStruct { #[allow(clippy::absolute_paths)] fn drop(self: ::pin_project::__private::Pin<&mut Self>) {} } /// Testing pinned drop enum. #[allow(clippy::absolute_paths, clippy::exhaustive_enums)] // for the type itself #[::pin_project::pin_project( PinnedDrop, project = PinnedDropEnumProj, project_ref = PinnedDropEnumProjRef, )] #[derive(Debug)] pub enum PinnedDropEnum { /// Struct variant. Struct { /// Pinned field. #[pin] pinned: T, /// Unpinned field. unpinned: U, }, /// Tuple variant. Tuple(#[pin] T, U), /// Unit variant. Unit, } #[::pin_project::pinned_drop] #[allow(clippy::absolute_paths)] impl PinnedDrop for PinnedDropEnum { fn drop(self: ::pin_project::__private::Pin<&mut Self>) {} } /// Testing default struct with replace. #[allow(clippy::exhaustive_structs)] // for the type itself #[::pin_project::pin_project(project_replace)] #[derive(Debug)] pub struct ReplaceStruct { /// Pinned field. #[pin] pub pinned: T, /// Unpinned field. pub unpinned: U, } /// Testing named struct with replace. #[::pin_project::pin_project( project = ReplaceStructNamedProj, project_ref = ReplaceStructNamedProjRef, project_replace = ReplaceStructNamedProjOwn, )] #[allow(clippy::exhaustive_structs)] // for the type itself #[derive(Debug)] pub struct ReplaceStructNamed { /// Pinned field. #[pin] pub pinned: T, /// Unpinned field. pub unpinned: U, } /// Testing default struct with replace. #[::pin_project::pin_project(project_replace)] #[derive(Debug)] #[allow(clippy::exhaustive_structs)] // for the type itself pub struct ReplaceTupleStruct(#[pin] pub T, pub U); /// Testing named struct with replace. #[::pin_project::pin_project( project = ReplaceTupleStructNamedProj, project_ref = ReplaceTupleStructNamedProjRef, project_replace = ReplaceTupleStructNamedProjOwn, )] #[derive(Debug)] #[allow(clippy::exhaustive_structs)] // for the type itself pub struct ReplaceTupleStructNamed(#[pin] pub T, pub U); /// Testing enum with replace. #[allow(clippy::exhaustive_enums)] // for the type itself #[::pin_project::pin_project( project = ReplaceEnumProj, project_ref = ReplaceEnumProjRef, project_replace = ReplaceEnumProjOwn, )] #[derive(Debug)] pub enum ReplaceEnum { /// Struct variant. Struct { /// Pinned field. #[pin] pinned: T, /// Unpinned field. unpinned: U, }, /// Tuple variant. Tuple(#[pin] T, U), /// Unit variant. Unit, } /// Testing struct with unsafe `Unpin`. #[::pin_project::pin_project(UnsafeUnpin)] #[allow(clippy::exhaustive_structs)] // for the type itself #[derive(Debug)] pub struct UnsafeUnpinStruct { /// Pinned field. #[pin] pub pinned: T, /// Unpinned field. pub unpinned: U, } /// Testing tuple struct with unsafe `Unpin`. #[::pin_project::pin_project(UnsafeUnpin)] #[allow(clippy::exhaustive_structs)] // for the type itself #[derive(Debug)] pub struct UnsafeUnpinTupleStruct(#[pin] pub T, pub U); /// Testing enum unsafe `Unpin`. #[allow(clippy::exhaustive_enums)] // for the type itself #[::pin_project::pin_project( UnsafeUnpin, project = UnsafeUnpinEnumProj, project_ref = UnsafeUnpinEnumProjRef, )] #[derive(Debug)] pub enum UnsafeUnpinEnum { /// Struct variant. Struct { /// Pinned field. #[pin] pinned: T, /// Unpinned field. unpinned: U, }, /// Tuple variant. Tuple(#[pin] T, U), /// Unit variant. Unit, } /// Testing struct with `!Unpin`. #[::pin_project::pin_project(!Unpin)] #[derive(Debug)] #[allow(clippy::exhaustive_structs)] // for the type itself pub struct NotUnpinStruct { /// Pinned field. #[pin] pub pinned: T, /// Unpinned field. pub unpinned: U, } /// Testing tuple struct with `!Unpin`. #[allow(clippy::exhaustive_structs)] // for the type itself #[::pin_project::pin_project(!Unpin)] #[derive(Debug)] pub struct NotUnpinTupleStruct(#[pin] pub T, pub U); /// Testing enum with `!Unpin`. #[allow(clippy::exhaustive_enums)] // for the type itself #[::pin_project::pin_project( !Unpin, project = NotUnpinEnumProj, project_ref = NotUnpinEnumProjRef, )] #[derive(Debug)] pub enum NotUnpinEnum { /// Struct variant. Struct { /// Pinned field. #[pin] pinned: T, /// Unpinned field. unpinned: U, }, /// Tuple variant. Tuple(#[pin] T, U), /// Unit variant. Unit, }