1 use pin_project::pin_project;
2 #[pin(__private(project = EnumProj, project_ref = EnumProjRef))]
3 pub enum Enum<T, U> {
4 Struct { #[pin] pinned: T, unpinned: U },
5 Tuple(#[pin] T, U),
6 Unit,
7 }
8 #[allow(box_pointers)]
9 #[allow(deprecated)]
10 #[allow(explicit_outlives_requirements)]
11 #[allow(single_use_lifetimes)]
12 #[allow(unreachable_pub)]
13 #[allow(unused_tuple_struct_fields)]
14 #[allow(clippy::unknown_clippy_lints)]
15 #[allow(clippy::pattern_type_mismatch)]
16 #[allow(clippy::redundant_pub_crate)]
17 #[allow(clippy::type_repetition_in_bounds)]
18 #[allow(dead_code)]
19 #[allow(clippy::mut_mut)]
20 pub(crate) enum EnumProj<'pin, T, U>
21 where
22 Enum<T, U>: 'pin,
23 {
24 Struct {
25 pinned: ::pin_project::__private::Pin<&'pin mut (T)>,
26 unpinned: &'pin mut (U),
27 },
28 Tuple(::pin_project::__private::Pin<&'pin mut (T)>, &'pin mut (U)),
29 Unit,
30 }
31 #[allow(box_pointers)]
32 #[allow(deprecated)]
33 #[allow(explicit_outlives_requirements)]
34 #[allow(single_use_lifetimes)]
35 #[allow(unreachable_pub)]
36 #[allow(unused_tuple_struct_fields)]
37 #[allow(clippy::unknown_clippy_lints)]
38 #[allow(clippy::pattern_type_mismatch)]
39 #[allow(clippy::redundant_pub_crate)]
40 #[allow(clippy::type_repetition_in_bounds)]
41 #[allow(dead_code)]
42 #[allow(clippy::ref_option_ref)]
43 pub(crate) enum EnumProjRef<'pin, T, U>
44 where
45 Enum<T, U>: 'pin,
46 {
47 Struct { pinned: ::pin_project::__private::Pin<&'pin (T)>, unpinned: &'pin (U) },
48 Tuple(::pin_project::__private::Pin<&'pin (T)>, &'pin (U)),
49 Unit,
50 }
51 #[allow(box_pointers)]
52 #[allow(deprecated)]
53 #[allow(explicit_outlives_requirements)]
54 #[allow(single_use_lifetimes)]
55 #[allow(unreachable_pub)]
56 #[allow(unused_tuple_struct_fields)]
57 #[allow(clippy::unknown_clippy_lints)]
58 #[allow(clippy::pattern_type_mismatch)]
59 #[allow(clippy::redundant_pub_crate)]
60 #[allow(clippy::type_repetition_in_bounds)]
61 #[allow(unused_qualifications)]
62 #[allow(clippy::semicolon_if_nothing_returned)]
63 #[allow(clippy::use_self)]
64 #[allow(clippy::used_underscore_binding)]
65 const _: () = {
66 #[allow(unused_extern_crates)]
67 extern crate pin_project as _pin_project;
68 impl<T, U> Enum<T, U> {
69 #[allow(dead_code)]
70 #[inline]
project<'pin>( self: _pin_project::__private::Pin<&'pin mut Self>, ) -> EnumProj<'pin, T, U>71 pub(crate) fn project<'pin>(
72 self: _pin_project::__private::Pin<&'pin mut Self>,
73 ) -> EnumProj<'pin, T, U> {
74 unsafe {
75 match self.get_unchecked_mut() {
76 Self::Struct { pinned, unpinned } => {
77 EnumProj::Struct {
78 pinned: _pin_project::__private::Pin::new_unchecked(pinned),
79 unpinned,
80 }
81 }
82 Self::Tuple(_0, _1) => {
83 EnumProj::Tuple(
84 _pin_project::__private::Pin::new_unchecked(_0),
85 _1,
86 )
87 }
88 Self::Unit => EnumProj::Unit,
89 }
90 }
91 }
92 #[allow(dead_code)]
93 #[allow(clippy::missing_const_for_fn)]
94 #[inline]
project_ref<'pin>( self: _pin_project::__private::Pin<&'pin Self>, ) -> EnumProjRef<'pin, T, U>95 pub(crate) fn project_ref<'pin>(
96 self: _pin_project::__private::Pin<&'pin Self>,
97 ) -> EnumProjRef<'pin, T, U> {
98 unsafe {
99 match self.get_ref() {
100 Self::Struct { pinned, unpinned } => {
101 EnumProjRef::Struct {
102 pinned: _pin_project::__private::Pin::new_unchecked(pinned),
103 unpinned,
104 }
105 }
106 Self::Tuple(_0, _1) => {
107 EnumProjRef::Tuple(
108 _pin_project::__private::Pin::new_unchecked(_0),
109 _1,
110 )
111 }
112 Self::Unit => EnumProjRef::Unit,
113 }
114 }
115 }
116 }
117 #[allow(missing_debug_implementations)]
118 pub struct __Enum<'pin, T, U> {
119 __pin_project_use_generics: _pin_project::__private::AlwaysUnpin<
120 'pin,
121 (
122 _pin_project::__private::PhantomData<T>,
123 _pin_project::__private::PhantomData<U>,
124 ),
125 >,
126 __field0: T,
127 __field1: T,
128 }
129 impl<'pin, T, U> _pin_project::__private::Unpin for Enum<T, U>
130 where
131 __Enum<'pin, T, U>: _pin_project::__private::Unpin,
132 {}
133 #[doc(hidden)]
134 unsafe impl<'pin, T, U> _pin_project::UnsafeUnpin for Enum<T, U>
135 where
136 __Enum<'pin, T, U>: _pin_project::__private::Unpin,
137 {}
138 trait EnumMustNotImplDrop {}
139 #[allow(clippy::drop_bounds, drop_bounds)]
140 impl<T: _pin_project::__private::Drop> EnumMustNotImplDrop for T {}
141 impl<T, U> EnumMustNotImplDrop for Enum<T, U> {}
142 #[doc(hidden)]
143 impl<T, U> _pin_project::__private::PinnedDrop for Enum<T, U> {
drop(self: _pin_project::__private::Pin<&mut Self>)144 unsafe fn drop(self: _pin_project::__private::Pin<&mut Self>) {}
145 }
146 };
main()147 fn main() {}
148