1 use pin_project_lite::pin_project;
2 enum Enum<T, U> {
3 Struct { pinned: T, unpinned: U },
4 Unit,
5 }
6 #[doc(hidden)]
7 #[allow(
8 dead_code,
9 single_use_lifetimes,
10 clippy::unknown_clippy_lints,
11 clippy::absolute_paths,
12 clippy::min_ident_chars,
13 clippy::mut_mut,
14 clippy::redundant_pub_crate,
15 clippy::ref_option_ref,
16 clippy::single_char_lifetime_names,
17 clippy::type_repetition_in_bounds
18 )]
19 enum EnumProj<'__pin, T, U>
20 where
21 Enum<T, U>: '__pin,
22 {
23 Struct {
24 pinned: ::pin_project_lite::__private::Pin<&'__pin mut (T)>,
25 unpinned: &'__pin mut (U),
26 },
27 Unit,
28 }
29 #[doc(hidden)]
30 #[allow(
31 dead_code,
32 single_use_lifetimes,
33 clippy::unknown_clippy_lints,
34 clippy::absolute_paths,
35 clippy::min_ident_chars,
36 clippy::mut_mut,
37 clippy::redundant_pub_crate,
38 clippy::ref_option_ref,
39 clippy::single_char_lifetime_names,
40 clippy::type_repetition_in_bounds
41 )]
42 enum EnumProjRef<'__pin, T, U>
43 where
44 Enum<T, U>: '__pin,
45 {
46 Struct {
47 pinned: ::pin_project_lite::__private::Pin<&'__pin (T)>,
48 unpinned: &'__pin (U),
49 },
50 Unit,
51 }
52 #[allow(
53 single_use_lifetimes,
54 clippy::unknown_clippy_lints,
55 clippy::absolute_paths,
56 clippy::min_ident_chars,
57 clippy::single_char_lifetime_names,
58 clippy::used_underscore_binding
59 )]
60 const _: () = {
61 impl<T, U> Enum<T, U> {
62 #[doc(hidden)]
63 #[inline]
project<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin mut Self>, ) -> EnumProj<'__pin, T, U>64 fn project<'__pin>(
65 self: ::pin_project_lite::__private::Pin<&'__pin mut Self>,
66 ) -> EnumProj<'__pin, T, U> {
67 unsafe {
68 match self.get_unchecked_mut() {
69 Self::Struct { pinned, unpinned } => {
70 EnumProj::Struct {
71 pinned: ::pin_project_lite::__private::Pin::new_unchecked(
72 pinned,
73 ),
74 unpinned: unpinned,
75 }
76 }
77 Self::Unit => EnumProj::Unit,
78 }
79 }
80 }
81 #[doc(hidden)]
82 #[inline]
project_ref<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin Self>, ) -> EnumProjRef<'__pin, T, U>83 fn project_ref<'__pin>(
84 self: ::pin_project_lite::__private::Pin<&'__pin Self>,
85 ) -> EnumProjRef<'__pin, T, U> {
86 unsafe {
87 match self.get_ref() {
88 Self::Struct { pinned, unpinned } => {
89 EnumProjRef::Struct {
90 pinned: ::pin_project_lite::__private::Pin::new_unchecked(
91 pinned,
92 ),
93 unpinned: unpinned,
94 }
95 }
96 Self::Unit => EnumProjRef::Unit,
97 }
98 }
99 }
100 }
101 #[doc(hidden)]
102 impl<'__pin, T, U> ::pin_project_lite::__private::Unpin for Enum<T, U>
103 where
104 (
105 ::pin_project_lite::__private::PhantomData<&'__pin ()>,
106 ::pin_project_lite::__private::PhantomPinned,
107 ): ::pin_project_lite::__private::Unpin,
108 {}
109 trait MustNotImplDrop {}
110 #[allow(clippy::drop_bounds, drop_bounds)]
111 impl<T: ::pin_project_lite::__private::Drop> MustNotImplDrop for T {}
112 impl<T, U> MustNotImplDrop for Enum<T, U> {}
113 };
main()114 fn main() {}
115