133d722a9Sopenharmony_ciuse crate::syntax::{
233d722a9Sopenharmony_ci    Array, ExternFn, Include, Lifetimes, Ptr, Receiver, Ref, Signature, SliceRef, Ty1, Type, Var,
333d722a9Sopenharmony_ci};
433d722a9Sopenharmony_ciuse std::hash::{Hash, Hasher};
533d722a9Sopenharmony_ciuse std::mem;
633d722a9Sopenharmony_ciuse std::ops::{Deref, DerefMut};
733d722a9Sopenharmony_ci
833d722a9Sopenharmony_ciimpl PartialEq for Include {
933d722a9Sopenharmony_ci    fn eq(&self, other: &Self) -> bool {
1033d722a9Sopenharmony_ci        let Include {
1133d722a9Sopenharmony_ci            cfg: _,
1233d722a9Sopenharmony_ci            path,
1333d722a9Sopenharmony_ci            kind,
1433d722a9Sopenharmony_ci            begin_span: _,
1533d722a9Sopenharmony_ci            end_span: _,
1633d722a9Sopenharmony_ci        } = self;
1733d722a9Sopenharmony_ci        let Include {
1833d722a9Sopenharmony_ci            cfg: _,
1933d722a9Sopenharmony_ci            path: path2,
2033d722a9Sopenharmony_ci            kind: kind2,
2133d722a9Sopenharmony_ci            begin_span: _,
2233d722a9Sopenharmony_ci            end_span: _,
2333d722a9Sopenharmony_ci        } = other;
2433d722a9Sopenharmony_ci        path == path2 && kind == kind2
2533d722a9Sopenharmony_ci    }
2633d722a9Sopenharmony_ci}
2733d722a9Sopenharmony_ci
2833d722a9Sopenharmony_ciimpl Deref for ExternFn {
2933d722a9Sopenharmony_ci    type Target = Signature;
3033d722a9Sopenharmony_ci
3133d722a9Sopenharmony_ci    fn deref(&self) -> &Self::Target {
3233d722a9Sopenharmony_ci        &self.sig
3333d722a9Sopenharmony_ci    }
3433d722a9Sopenharmony_ci}
3533d722a9Sopenharmony_ci
3633d722a9Sopenharmony_ciimpl DerefMut for ExternFn {
3733d722a9Sopenharmony_ci    fn deref_mut(&mut self) -> &mut Self::Target {
3833d722a9Sopenharmony_ci        &mut self.sig
3933d722a9Sopenharmony_ci    }
4033d722a9Sopenharmony_ci}
4133d722a9Sopenharmony_ci
4233d722a9Sopenharmony_ciimpl Hash for Type {
4333d722a9Sopenharmony_ci    fn hash<H: Hasher>(&self, state: &mut H) {
4433d722a9Sopenharmony_ci        mem::discriminant(self).hash(state);
4533d722a9Sopenharmony_ci        match self {
4633d722a9Sopenharmony_ci            Type::Ident(t) => t.hash(state),
4733d722a9Sopenharmony_ci            Type::RustBox(t) => t.hash(state),
4833d722a9Sopenharmony_ci            Type::UniquePtr(t) => t.hash(state),
4933d722a9Sopenharmony_ci            Type::SharedPtr(t) => t.hash(state),
5033d722a9Sopenharmony_ci            Type::WeakPtr(t) => t.hash(state),
5133d722a9Sopenharmony_ci            Type::Ref(t) => t.hash(state),
5233d722a9Sopenharmony_ci            Type::Ptr(t) => t.hash(state),
5333d722a9Sopenharmony_ci            Type::Str(t) => t.hash(state),
5433d722a9Sopenharmony_ci            Type::RustVec(t) => t.hash(state),
5533d722a9Sopenharmony_ci            Type::CxxVector(t) => t.hash(state),
5633d722a9Sopenharmony_ci            Type::Fn(t) => t.hash(state),
5733d722a9Sopenharmony_ci            Type::SliceRef(t) => t.hash(state),
5833d722a9Sopenharmony_ci            Type::Array(t) => t.hash(state),
5933d722a9Sopenharmony_ci            Type::Void(_) => {}
6033d722a9Sopenharmony_ci        }
6133d722a9Sopenharmony_ci    }
6233d722a9Sopenharmony_ci}
6333d722a9Sopenharmony_ci
6433d722a9Sopenharmony_ciimpl Eq for Type {}
6533d722a9Sopenharmony_ci
6633d722a9Sopenharmony_ciimpl PartialEq for Type {
6733d722a9Sopenharmony_ci    fn eq(&self, other: &Self) -> bool {
6833d722a9Sopenharmony_ci        match (self, other) {
6933d722a9Sopenharmony_ci            (Type::Ident(lhs), Type::Ident(rhs)) => lhs == rhs,
7033d722a9Sopenharmony_ci            (Type::RustBox(lhs), Type::RustBox(rhs)) => lhs == rhs,
7133d722a9Sopenharmony_ci            (Type::UniquePtr(lhs), Type::UniquePtr(rhs)) => lhs == rhs,
7233d722a9Sopenharmony_ci            (Type::SharedPtr(lhs), Type::SharedPtr(rhs)) => lhs == rhs,
7333d722a9Sopenharmony_ci            (Type::WeakPtr(lhs), Type::WeakPtr(rhs)) => lhs == rhs,
7433d722a9Sopenharmony_ci            (Type::Ref(lhs), Type::Ref(rhs)) => lhs == rhs,
7533d722a9Sopenharmony_ci            (Type::Str(lhs), Type::Str(rhs)) => lhs == rhs,
7633d722a9Sopenharmony_ci            (Type::RustVec(lhs), Type::RustVec(rhs)) => lhs == rhs,
7733d722a9Sopenharmony_ci            (Type::CxxVector(lhs), Type::CxxVector(rhs)) => lhs == rhs,
7833d722a9Sopenharmony_ci            (Type::Fn(lhs), Type::Fn(rhs)) => lhs == rhs,
7933d722a9Sopenharmony_ci            (Type::SliceRef(lhs), Type::SliceRef(rhs)) => lhs == rhs,
8033d722a9Sopenharmony_ci            (Type::Void(_), Type::Void(_)) => true,
8133d722a9Sopenharmony_ci            (_, _) => false,
8233d722a9Sopenharmony_ci        }
8333d722a9Sopenharmony_ci    }
8433d722a9Sopenharmony_ci}
8533d722a9Sopenharmony_ci
8633d722a9Sopenharmony_ciimpl Eq for Lifetimes {}
8733d722a9Sopenharmony_ci
8833d722a9Sopenharmony_ciimpl PartialEq for Lifetimes {
8933d722a9Sopenharmony_ci    fn eq(&self, other: &Self) -> bool {
9033d722a9Sopenharmony_ci        let Lifetimes {
9133d722a9Sopenharmony_ci            lt_token: _,
9233d722a9Sopenharmony_ci            lifetimes,
9333d722a9Sopenharmony_ci            gt_token: _,
9433d722a9Sopenharmony_ci        } = self;
9533d722a9Sopenharmony_ci        let Lifetimes {
9633d722a9Sopenharmony_ci            lt_token: _,
9733d722a9Sopenharmony_ci            lifetimes: lifetimes2,
9833d722a9Sopenharmony_ci            gt_token: _,
9933d722a9Sopenharmony_ci        } = other;
10033d722a9Sopenharmony_ci        lifetimes.iter().eq(lifetimes2)
10133d722a9Sopenharmony_ci    }
10233d722a9Sopenharmony_ci}
10333d722a9Sopenharmony_ci
10433d722a9Sopenharmony_ciimpl Hash for Lifetimes {
10533d722a9Sopenharmony_ci    fn hash<H: Hasher>(&self, state: &mut H) {
10633d722a9Sopenharmony_ci        let Lifetimes {
10733d722a9Sopenharmony_ci            lt_token: _,
10833d722a9Sopenharmony_ci            lifetimes,
10933d722a9Sopenharmony_ci            gt_token: _,
11033d722a9Sopenharmony_ci        } = self;
11133d722a9Sopenharmony_ci        lifetimes.len().hash(state);
11233d722a9Sopenharmony_ci        for lifetime in lifetimes {
11333d722a9Sopenharmony_ci            lifetime.hash(state);
11433d722a9Sopenharmony_ci        }
11533d722a9Sopenharmony_ci    }
11633d722a9Sopenharmony_ci}
11733d722a9Sopenharmony_ci
11833d722a9Sopenharmony_ciimpl Eq for Ty1 {}
11933d722a9Sopenharmony_ci
12033d722a9Sopenharmony_ciimpl PartialEq for Ty1 {
12133d722a9Sopenharmony_ci    fn eq(&self, other: &Self) -> bool {
12233d722a9Sopenharmony_ci        let Ty1 {
12333d722a9Sopenharmony_ci            name,
12433d722a9Sopenharmony_ci            langle: _,
12533d722a9Sopenharmony_ci            inner,
12633d722a9Sopenharmony_ci            rangle: _,
12733d722a9Sopenharmony_ci        } = self;
12833d722a9Sopenharmony_ci        let Ty1 {
12933d722a9Sopenharmony_ci            name: name2,
13033d722a9Sopenharmony_ci            langle: _,
13133d722a9Sopenharmony_ci            inner: inner2,
13233d722a9Sopenharmony_ci            rangle: _,
13333d722a9Sopenharmony_ci        } = other;
13433d722a9Sopenharmony_ci        name == name2 && inner == inner2
13533d722a9Sopenharmony_ci    }
13633d722a9Sopenharmony_ci}
13733d722a9Sopenharmony_ci
13833d722a9Sopenharmony_ciimpl Hash for Ty1 {
13933d722a9Sopenharmony_ci    fn hash<H: Hasher>(&self, state: &mut H) {
14033d722a9Sopenharmony_ci        let Ty1 {
14133d722a9Sopenharmony_ci            name,
14233d722a9Sopenharmony_ci            langle: _,
14333d722a9Sopenharmony_ci            inner,
14433d722a9Sopenharmony_ci            rangle: _,
14533d722a9Sopenharmony_ci        } = self;
14633d722a9Sopenharmony_ci        name.hash(state);
14733d722a9Sopenharmony_ci        inner.hash(state);
14833d722a9Sopenharmony_ci    }
14933d722a9Sopenharmony_ci}
15033d722a9Sopenharmony_ci
15133d722a9Sopenharmony_ciimpl Eq for Ref {}
15233d722a9Sopenharmony_ci
15333d722a9Sopenharmony_ciimpl PartialEq for Ref {
15433d722a9Sopenharmony_ci    fn eq(&self, other: &Self) -> bool {
15533d722a9Sopenharmony_ci        let Ref {
15633d722a9Sopenharmony_ci            pinned,
15733d722a9Sopenharmony_ci            ampersand: _,
15833d722a9Sopenharmony_ci            lifetime,
15933d722a9Sopenharmony_ci            mutable,
16033d722a9Sopenharmony_ci            inner,
16133d722a9Sopenharmony_ci            pin_tokens: _,
16233d722a9Sopenharmony_ci            mutability: _,
16333d722a9Sopenharmony_ci        } = self;
16433d722a9Sopenharmony_ci        let Ref {
16533d722a9Sopenharmony_ci            pinned: pinned2,
16633d722a9Sopenharmony_ci            ampersand: _,
16733d722a9Sopenharmony_ci            lifetime: lifetime2,
16833d722a9Sopenharmony_ci            mutable: mutable2,
16933d722a9Sopenharmony_ci            inner: inner2,
17033d722a9Sopenharmony_ci            pin_tokens: _,
17133d722a9Sopenharmony_ci            mutability: _,
17233d722a9Sopenharmony_ci        } = other;
17333d722a9Sopenharmony_ci        pinned == pinned2 && lifetime == lifetime2 && mutable == mutable2 && inner == inner2
17433d722a9Sopenharmony_ci    }
17533d722a9Sopenharmony_ci}
17633d722a9Sopenharmony_ci
17733d722a9Sopenharmony_ciimpl Hash for Ref {
17833d722a9Sopenharmony_ci    fn hash<H: Hasher>(&self, state: &mut H) {
17933d722a9Sopenharmony_ci        let Ref {
18033d722a9Sopenharmony_ci            pinned,
18133d722a9Sopenharmony_ci            ampersand: _,
18233d722a9Sopenharmony_ci            lifetime,
18333d722a9Sopenharmony_ci            mutable,
18433d722a9Sopenharmony_ci            inner,
18533d722a9Sopenharmony_ci            pin_tokens: _,
18633d722a9Sopenharmony_ci            mutability: _,
18733d722a9Sopenharmony_ci        } = self;
18833d722a9Sopenharmony_ci        pinned.hash(state);
18933d722a9Sopenharmony_ci        lifetime.hash(state);
19033d722a9Sopenharmony_ci        mutable.hash(state);
19133d722a9Sopenharmony_ci        inner.hash(state);
19233d722a9Sopenharmony_ci    }
19333d722a9Sopenharmony_ci}
19433d722a9Sopenharmony_ci
19533d722a9Sopenharmony_ciimpl Eq for Ptr {}
19633d722a9Sopenharmony_ci
19733d722a9Sopenharmony_ciimpl PartialEq for Ptr {
19833d722a9Sopenharmony_ci    fn eq(&self, other: &Ptr) -> bool {
19933d722a9Sopenharmony_ci        let Ptr {
20033d722a9Sopenharmony_ci            star: _,
20133d722a9Sopenharmony_ci            mutable,
20233d722a9Sopenharmony_ci            inner,
20333d722a9Sopenharmony_ci            mutability: _,
20433d722a9Sopenharmony_ci            constness: _,
20533d722a9Sopenharmony_ci        } = self;
20633d722a9Sopenharmony_ci        let Ptr {
20733d722a9Sopenharmony_ci            star: _,
20833d722a9Sopenharmony_ci            mutable: mutable2,
20933d722a9Sopenharmony_ci            inner: inner2,
21033d722a9Sopenharmony_ci            mutability: _,
21133d722a9Sopenharmony_ci            constness: _,
21233d722a9Sopenharmony_ci        } = other;
21333d722a9Sopenharmony_ci        mutable == mutable2 && inner == inner2
21433d722a9Sopenharmony_ci    }
21533d722a9Sopenharmony_ci}
21633d722a9Sopenharmony_ci
21733d722a9Sopenharmony_ciimpl Hash for Ptr {
21833d722a9Sopenharmony_ci    fn hash<H: Hasher>(&self, state: &mut H) {
21933d722a9Sopenharmony_ci        let Ptr {
22033d722a9Sopenharmony_ci            star: _,
22133d722a9Sopenharmony_ci            mutable,
22233d722a9Sopenharmony_ci            inner,
22333d722a9Sopenharmony_ci            mutability: _,
22433d722a9Sopenharmony_ci            constness: _,
22533d722a9Sopenharmony_ci        } = self;
22633d722a9Sopenharmony_ci        mutable.hash(state);
22733d722a9Sopenharmony_ci        inner.hash(state);
22833d722a9Sopenharmony_ci    }
22933d722a9Sopenharmony_ci}
23033d722a9Sopenharmony_ci
23133d722a9Sopenharmony_ciimpl Eq for SliceRef {}
23233d722a9Sopenharmony_ci
23333d722a9Sopenharmony_ciimpl PartialEq for SliceRef {
23433d722a9Sopenharmony_ci    fn eq(&self, other: &Self) -> bool {
23533d722a9Sopenharmony_ci        let SliceRef {
23633d722a9Sopenharmony_ci            ampersand: _,
23733d722a9Sopenharmony_ci            lifetime,
23833d722a9Sopenharmony_ci            mutable,
23933d722a9Sopenharmony_ci            bracket: _,
24033d722a9Sopenharmony_ci            inner,
24133d722a9Sopenharmony_ci            mutability: _,
24233d722a9Sopenharmony_ci        } = self;
24333d722a9Sopenharmony_ci        let SliceRef {
24433d722a9Sopenharmony_ci            ampersand: _,
24533d722a9Sopenharmony_ci            lifetime: lifetime2,
24633d722a9Sopenharmony_ci            mutable: mutable2,
24733d722a9Sopenharmony_ci            bracket: _,
24833d722a9Sopenharmony_ci            inner: inner2,
24933d722a9Sopenharmony_ci            mutability: _,
25033d722a9Sopenharmony_ci        } = other;
25133d722a9Sopenharmony_ci        lifetime == lifetime2 && mutable == mutable2 && inner == inner2
25233d722a9Sopenharmony_ci    }
25333d722a9Sopenharmony_ci}
25433d722a9Sopenharmony_ci
25533d722a9Sopenharmony_ciimpl Hash for SliceRef {
25633d722a9Sopenharmony_ci    fn hash<H: Hasher>(&self, state: &mut H) {
25733d722a9Sopenharmony_ci        let SliceRef {
25833d722a9Sopenharmony_ci            ampersand: _,
25933d722a9Sopenharmony_ci            lifetime,
26033d722a9Sopenharmony_ci            mutable,
26133d722a9Sopenharmony_ci            bracket: _,
26233d722a9Sopenharmony_ci            inner,
26333d722a9Sopenharmony_ci            mutability: _,
26433d722a9Sopenharmony_ci        } = self;
26533d722a9Sopenharmony_ci        lifetime.hash(state);
26633d722a9Sopenharmony_ci        mutable.hash(state);
26733d722a9Sopenharmony_ci        inner.hash(state);
26833d722a9Sopenharmony_ci    }
26933d722a9Sopenharmony_ci}
27033d722a9Sopenharmony_ci
27133d722a9Sopenharmony_ciimpl Eq for Array {}
27233d722a9Sopenharmony_ci
27333d722a9Sopenharmony_ciimpl PartialEq for Array {
27433d722a9Sopenharmony_ci    fn eq(&self, other: &Self) -> bool {
27533d722a9Sopenharmony_ci        let Array {
27633d722a9Sopenharmony_ci            bracket: _,
27733d722a9Sopenharmony_ci            inner,
27833d722a9Sopenharmony_ci            semi_token: _,
27933d722a9Sopenharmony_ci            len,
28033d722a9Sopenharmony_ci            len_token: _,
28133d722a9Sopenharmony_ci        } = self;
28233d722a9Sopenharmony_ci        let Array {
28333d722a9Sopenharmony_ci            bracket: _,
28433d722a9Sopenharmony_ci            inner: inner2,
28533d722a9Sopenharmony_ci            semi_token: _,
28633d722a9Sopenharmony_ci            len: len2,
28733d722a9Sopenharmony_ci            len_token: _,
28833d722a9Sopenharmony_ci        } = other;
28933d722a9Sopenharmony_ci        inner == inner2 && len == len2
29033d722a9Sopenharmony_ci    }
29133d722a9Sopenharmony_ci}
29233d722a9Sopenharmony_ci
29333d722a9Sopenharmony_ciimpl Hash for Array {
29433d722a9Sopenharmony_ci    fn hash<H: Hasher>(&self, state: &mut H) {
29533d722a9Sopenharmony_ci        let Array {
29633d722a9Sopenharmony_ci            bracket: _,
29733d722a9Sopenharmony_ci            inner,
29833d722a9Sopenharmony_ci            semi_token: _,
29933d722a9Sopenharmony_ci            len,
30033d722a9Sopenharmony_ci            len_token: _,
30133d722a9Sopenharmony_ci        } = self;
30233d722a9Sopenharmony_ci        inner.hash(state);
30333d722a9Sopenharmony_ci        len.hash(state);
30433d722a9Sopenharmony_ci    }
30533d722a9Sopenharmony_ci}
30633d722a9Sopenharmony_ci
30733d722a9Sopenharmony_ciimpl Eq for Signature {}
30833d722a9Sopenharmony_ci
30933d722a9Sopenharmony_ciimpl PartialEq for Signature {
31033d722a9Sopenharmony_ci    fn eq(&self, other: &Self) -> bool {
31133d722a9Sopenharmony_ci        let Signature {
31233d722a9Sopenharmony_ci            asyncness,
31333d722a9Sopenharmony_ci            unsafety,
31433d722a9Sopenharmony_ci            fn_token: _,
31533d722a9Sopenharmony_ci            generics: _,
31633d722a9Sopenharmony_ci            receiver,
31733d722a9Sopenharmony_ci            args,
31833d722a9Sopenharmony_ci            ret,
31933d722a9Sopenharmony_ci            throws,
32033d722a9Sopenharmony_ci            paren_token: _,
32133d722a9Sopenharmony_ci            throws_tokens: _,
32233d722a9Sopenharmony_ci        } = self;
32333d722a9Sopenharmony_ci        let Signature {
32433d722a9Sopenharmony_ci            asyncness: asyncness2,
32533d722a9Sopenharmony_ci            unsafety: unsafety2,
32633d722a9Sopenharmony_ci            fn_token: _,
32733d722a9Sopenharmony_ci            generics: _,
32833d722a9Sopenharmony_ci            receiver: receiver2,
32933d722a9Sopenharmony_ci            args: args2,
33033d722a9Sopenharmony_ci            ret: ret2,
33133d722a9Sopenharmony_ci            throws: throws2,
33233d722a9Sopenharmony_ci            paren_token: _,
33333d722a9Sopenharmony_ci            throws_tokens: _,
33433d722a9Sopenharmony_ci        } = other;
33533d722a9Sopenharmony_ci        asyncness.is_some() == asyncness2.is_some()
33633d722a9Sopenharmony_ci            && unsafety.is_some() == unsafety2.is_some()
33733d722a9Sopenharmony_ci            && receiver == receiver2
33833d722a9Sopenharmony_ci            && ret == ret2
33933d722a9Sopenharmony_ci            && throws == throws2
34033d722a9Sopenharmony_ci            && args.len() == args2.len()
34133d722a9Sopenharmony_ci            && args.iter().zip(args2).all(|(arg, arg2)| {
34233d722a9Sopenharmony_ci                let Var {
34333d722a9Sopenharmony_ci                    cfg: _,
34433d722a9Sopenharmony_ci                    doc: _,
34533d722a9Sopenharmony_ci                    attrs: _,
34633d722a9Sopenharmony_ci                    visibility: _,
34733d722a9Sopenharmony_ci                    name: _,
34833d722a9Sopenharmony_ci                    colon_token: _,
34933d722a9Sopenharmony_ci                    ty,
35033d722a9Sopenharmony_ci                } = arg;
35133d722a9Sopenharmony_ci                let Var {
35233d722a9Sopenharmony_ci                    cfg: _,
35333d722a9Sopenharmony_ci                    doc: _,
35433d722a9Sopenharmony_ci                    attrs: _,
35533d722a9Sopenharmony_ci                    visibility: _,
35633d722a9Sopenharmony_ci                    name: _,
35733d722a9Sopenharmony_ci                    colon_token: _,
35833d722a9Sopenharmony_ci                    ty: ty2,
35933d722a9Sopenharmony_ci                } = arg2;
36033d722a9Sopenharmony_ci                ty == ty2
36133d722a9Sopenharmony_ci            })
36233d722a9Sopenharmony_ci    }
36333d722a9Sopenharmony_ci}
36433d722a9Sopenharmony_ci
36533d722a9Sopenharmony_ciimpl Hash for Signature {
36633d722a9Sopenharmony_ci    fn hash<H: Hasher>(&self, state: &mut H) {
36733d722a9Sopenharmony_ci        let Signature {
36833d722a9Sopenharmony_ci            asyncness,
36933d722a9Sopenharmony_ci            unsafety,
37033d722a9Sopenharmony_ci            fn_token: _,
37133d722a9Sopenharmony_ci            generics: _,
37233d722a9Sopenharmony_ci            receiver,
37333d722a9Sopenharmony_ci            args,
37433d722a9Sopenharmony_ci            ret,
37533d722a9Sopenharmony_ci            throws,
37633d722a9Sopenharmony_ci            paren_token: _,
37733d722a9Sopenharmony_ci            throws_tokens: _,
37833d722a9Sopenharmony_ci        } = self;
37933d722a9Sopenharmony_ci        asyncness.is_some().hash(state);
38033d722a9Sopenharmony_ci        unsafety.is_some().hash(state);
38133d722a9Sopenharmony_ci        receiver.hash(state);
38233d722a9Sopenharmony_ci        for arg in args {
38333d722a9Sopenharmony_ci            let Var {
38433d722a9Sopenharmony_ci                cfg: _,
38533d722a9Sopenharmony_ci                doc: _,
38633d722a9Sopenharmony_ci                attrs: _,
38733d722a9Sopenharmony_ci                visibility: _,
38833d722a9Sopenharmony_ci                name: _,
38933d722a9Sopenharmony_ci                colon_token: _,
39033d722a9Sopenharmony_ci                ty,
39133d722a9Sopenharmony_ci            } = arg;
39233d722a9Sopenharmony_ci            ty.hash(state);
39333d722a9Sopenharmony_ci        }
39433d722a9Sopenharmony_ci        ret.hash(state);
39533d722a9Sopenharmony_ci        throws.hash(state);
39633d722a9Sopenharmony_ci    }
39733d722a9Sopenharmony_ci}
39833d722a9Sopenharmony_ci
39933d722a9Sopenharmony_ciimpl Eq for Receiver {}
40033d722a9Sopenharmony_ci
40133d722a9Sopenharmony_ciimpl PartialEq for Receiver {
40233d722a9Sopenharmony_ci    fn eq(&self, other: &Self) -> bool {
40333d722a9Sopenharmony_ci        let Receiver {
40433d722a9Sopenharmony_ci            pinned,
40533d722a9Sopenharmony_ci            ampersand: _,
40633d722a9Sopenharmony_ci            lifetime,
40733d722a9Sopenharmony_ci            mutable,
40833d722a9Sopenharmony_ci            var: _,
40933d722a9Sopenharmony_ci            colon_token: _,
41033d722a9Sopenharmony_ci            ty,
41133d722a9Sopenharmony_ci            shorthand: _,
41233d722a9Sopenharmony_ci            pin_tokens: _,
41333d722a9Sopenharmony_ci            mutability: _,
41433d722a9Sopenharmony_ci        } = self;
41533d722a9Sopenharmony_ci        let Receiver {
41633d722a9Sopenharmony_ci            pinned: pinned2,
41733d722a9Sopenharmony_ci            ampersand: _,
41833d722a9Sopenharmony_ci            lifetime: lifetime2,
41933d722a9Sopenharmony_ci            mutable: mutable2,
42033d722a9Sopenharmony_ci            var: _,
42133d722a9Sopenharmony_ci            colon_token: _,
42233d722a9Sopenharmony_ci            ty: ty2,
42333d722a9Sopenharmony_ci            shorthand: _,
42433d722a9Sopenharmony_ci            pin_tokens: _,
42533d722a9Sopenharmony_ci            mutability: _,
42633d722a9Sopenharmony_ci        } = other;
42733d722a9Sopenharmony_ci        pinned == pinned2 && lifetime == lifetime2 && mutable == mutable2 && ty == ty2
42833d722a9Sopenharmony_ci    }
42933d722a9Sopenharmony_ci}
43033d722a9Sopenharmony_ci
43133d722a9Sopenharmony_ciimpl Hash for Receiver {
43233d722a9Sopenharmony_ci    fn hash<H: Hasher>(&self, state: &mut H) {
43333d722a9Sopenharmony_ci        let Receiver {
43433d722a9Sopenharmony_ci            pinned,
43533d722a9Sopenharmony_ci            ampersand: _,
43633d722a9Sopenharmony_ci            lifetime,
43733d722a9Sopenharmony_ci            mutable,
43833d722a9Sopenharmony_ci            var: _,
43933d722a9Sopenharmony_ci            colon_token: _,
44033d722a9Sopenharmony_ci            ty,
44133d722a9Sopenharmony_ci            shorthand: _,
44233d722a9Sopenharmony_ci            pin_tokens: _,
44333d722a9Sopenharmony_ci            mutability: _,
44433d722a9Sopenharmony_ci        } = self;
44533d722a9Sopenharmony_ci        pinned.hash(state);
44633d722a9Sopenharmony_ci        lifetime.hash(state);
44733d722a9Sopenharmony_ci        mutable.hash(state);
44833d722a9Sopenharmony_ci        ty.hash(state);
44933d722a9Sopenharmony_ci    }
45033d722a9Sopenharmony_ci}
451