1 use pin_project_lite::pin_project;
2 use std::pin::Pin;
3 enum Enum<T, U> {
4 Struct { pinned: T, unpinned: U },
5 Unit,
6 }
7 #[allow(dead_code)]
8 #[allow(single_use_lifetimes)]
9 #[allow(clippy::unknown_clippy_lints)]
10 #[allow(clippy::mut_mut)]
11 #[allow(clippy::redundant_pub_crate)]
12 #[allow(clippy::ref_option_ref)]
13 #[allow(clippy::type_repetition_in_bounds)]
14 enum EnumProj<'__pin, T, U>
15 where
16 Enum<T, U>: '__pin,
17 {
18 Struct {
19 pinned: ::pin_project_lite::__private::Pin<&'__pin mut (T)>,
20 unpinned: &'__pin mut (U),
21 },
22 Unit,
23 }
24 #[allow(dead_code)]
25 #[allow(single_use_lifetimes)]
26 #[allow(clippy::unknown_clippy_lints)]
27 #[allow(clippy::mut_mut)]
28 #[allow(clippy::redundant_pub_crate)]
29 #[allow(clippy::ref_option_ref)]
30 #[allow(clippy::type_repetition_in_bounds)]
31 enum EnumProjRef<'__pin, T, U>
32 where
33 Enum<T, U>: '__pin,
34 {
35 Struct {
36 pinned: ::pin_project_lite::__private::Pin<&'__pin (T)>,
37 unpinned: &'__pin (U),
38 },
39 Unit,
40 }
41 #[allow(single_use_lifetimes)]
42 #[allow(clippy::unknown_clippy_lints)]
43 #[allow(clippy::used_underscore_binding)]
44 const _: () = {
45 impl<T, U> Enum<T, U> {
project<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin mut Self>, ) -> EnumProj<'__pin, T, U>46 fn project<'__pin>(
47 self: ::pin_project_lite::__private::Pin<&'__pin mut Self>,
48 ) -> EnumProj<'__pin, T, U> {
49 unsafe {
50 match self.get_unchecked_mut() {
51 Self::Struct { pinned, unpinned } => EnumProj::Struct {
52 pinned: ::pin_project_lite::__private::Pin::new_unchecked(pinned),
53 unpinned: unpinned,
54 },
55 Self::Unit => EnumProj::Unit,
56 }
57 }
58 }
project_ref<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin Self>, ) -> EnumProjRef<'__pin, T, U>59 fn project_ref<'__pin>(
60 self: ::pin_project_lite::__private::Pin<&'__pin Self>,
61 ) -> EnumProjRef<'__pin, T, U> {
62 unsafe {
63 match self.get_ref() {
64 Self::Struct { pinned, unpinned } => EnumProjRef::Struct {
65 pinned: ::pin_project_lite::__private::Pin::new_unchecked(pinned),
66 unpinned: unpinned,
67 },
68 Self::Unit => EnumProjRef::Unit,
69 }
70 }
71 }
72 }
73 #[allow(non_snake_case)]
74 struct __Origin<'__pin, T, U> {
75 __dummy_lifetime: ::pin_project_lite::__private::PhantomData<&'__pin ()>,
76 Struct: (T, ::pin_project_lite::__private::AlwaysUnpin<U>),
77 Unit: (),
78 }
79 impl<'__pin, T, U> ::pin_project_lite::__private::Unpin for Enum<T, U> where
80 __Origin<'__pin, T, U>: ::pin_project_lite::__private::Unpin
81 {
82 }
83 impl<T, U> ::pin_project_lite::__private::Drop for Enum<T, U> {
drop(&mut self)84 fn drop(&mut self) {
85 fn __drop_inner<T, U>(this: ::pin_project_lite::__private::Pin<&mut Enum<T, U>>) {
86 fn __drop_inner() {}
87 let _ = this;
88 }
89 let pinned_self: ::pin_project_lite::__private::Pin<&mut Self> =
90 unsafe { ::pin_project_lite::__private::Pin::new_unchecked(self) };
91 __drop_inner(pinned_self);
92 }
93 }
94 };
main()95 fn main() {}
96