syn/gen/
hash.rs

1// This file is @generated by syn-internal-codegen.
2// It is not intended for manual editing.
3
4#[cfg(any(feature = "derive", feature = "full"))]
5use crate::tt::TokenStreamHelper;
6#[cfg(feature = "extra-traits")]
7use alloc::string::ToString;
8use core::hash::{Hash, Hasher};
9#[cfg(any(feature = "derive", feature = "full"))]
10#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
11impl Hash for crate::Abi {
12    fn hash<H>(&self, state: &mut H)
13    where
14        H: Hasher,
15    {
16        self.name.hash(state);
17    }
18}
19#[cfg(any(feature = "derive", feature = "full"))]
20#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
21impl Hash for crate::AngleBracketedGenericArguments {
22    fn hash<H>(&self, state: &mut H)
23    where
24        H: Hasher,
25    {
26        self.colon2_token.hash(state);
27        self.args.hash(state);
28    }
29}
30#[cfg(feature = "full")]
31#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
32impl Hash for crate::Arm {
33    fn hash<H>(&self, state: &mut H)
34    where
35        H: Hasher,
36    {
37        self.attrs.hash(state);
38        self.pat.hash(state);
39        self.guard.hash(state);
40        self.body.hash(state);
41        self.comma.hash(state);
42    }
43}
44#[cfg(any(feature = "derive", feature = "full"))]
45#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
46impl Hash for crate::AssocConst {
47    fn hash<H>(&self, state: &mut H)
48    where
49        H: Hasher,
50    {
51        self.ident.hash(state);
52        self.generics.hash(state);
53        self.value.hash(state);
54    }
55}
56#[cfg(any(feature = "derive", feature = "full"))]
57#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
58impl Hash for crate::AssocType {
59    fn hash<H>(&self, state: &mut H)
60    where
61        H: Hasher,
62    {
63        self.ident.hash(state);
64        self.generics.hash(state);
65        self.ty.hash(state);
66    }
67}
68#[cfg(any(feature = "derive", feature = "full"))]
69#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
70impl Hash for crate::AttrStyle {
71    fn hash<H>(&self, state: &mut H)
72    where
73        H: Hasher,
74    {
75        match self {
76            crate::AttrStyle::Outer => {
77                state.write_u8(0u8);
78            }
79            crate::AttrStyle::Inner(_) => {
80                state.write_u8(1u8);
81            }
82        }
83    }
84}
85#[cfg(any(feature = "derive", feature = "full"))]
86#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
87impl Hash for crate::Attribute {
88    fn hash<H>(&self, state: &mut H)
89    where
90        H: Hasher,
91    {
92        self.style.hash(state);
93        self.meta.hash(state);
94    }
95}
96#[cfg(any(feature = "derive", feature = "full"))]
97#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
98impl Hash for crate::BareFnArg {
99    fn hash<H>(&self, state: &mut H)
100    where
101        H: Hasher,
102    {
103        self.attrs.hash(state);
104        self.name.hash(state);
105        self.ty.hash(state);
106    }
107}
108#[cfg(any(feature = "derive", feature = "full"))]
109#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
110impl Hash for crate::BareVariadic {
111    fn hash<H>(&self, state: &mut H)
112    where
113        H: Hasher,
114    {
115        self.attrs.hash(state);
116        self.name.hash(state);
117        self.comma.hash(state);
118    }
119}
120#[cfg(any(feature = "derive", feature = "full"))]
121#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
122impl Hash for crate::BinOp {
123    fn hash<H>(&self, state: &mut H)
124    where
125        H: Hasher,
126    {
127        match self {
128            crate::BinOp::Add(_) => {
129                state.write_u8(0u8);
130            }
131            crate::BinOp::Sub(_) => {
132                state.write_u8(1u8);
133            }
134            crate::BinOp::Mul(_) => {
135                state.write_u8(2u8);
136            }
137            crate::BinOp::Div(_) => {
138                state.write_u8(3u8);
139            }
140            crate::BinOp::Rem(_) => {
141                state.write_u8(4u8);
142            }
143            crate::BinOp::And(_) => {
144                state.write_u8(5u8);
145            }
146            crate::BinOp::Or(_) => {
147                state.write_u8(6u8);
148            }
149            crate::BinOp::BitXor(_) => {
150                state.write_u8(7u8);
151            }
152            crate::BinOp::BitAnd(_) => {
153                state.write_u8(8u8);
154            }
155            crate::BinOp::BitOr(_) => {
156                state.write_u8(9u8);
157            }
158            crate::BinOp::Shl(_) => {
159                state.write_u8(10u8);
160            }
161            crate::BinOp::Shr(_) => {
162                state.write_u8(11u8);
163            }
164            crate::BinOp::Eq(_) => {
165                state.write_u8(12u8);
166            }
167            crate::BinOp::Lt(_) => {
168                state.write_u8(13u8);
169            }
170            crate::BinOp::Le(_) => {
171                state.write_u8(14u8);
172            }
173            crate::BinOp::Ne(_) => {
174                state.write_u8(15u8);
175            }
176            crate::BinOp::Ge(_) => {
177                state.write_u8(16u8);
178            }
179            crate::BinOp::Gt(_) => {
180                state.write_u8(17u8);
181            }
182            crate::BinOp::AddAssign(_) => {
183                state.write_u8(18u8);
184            }
185            crate::BinOp::SubAssign(_) => {
186                state.write_u8(19u8);
187            }
188            crate::BinOp::MulAssign(_) => {
189                state.write_u8(20u8);
190            }
191            crate::BinOp::DivAssign(_) => {
192                state.write_u8(21u8);
193            }
194            crate::BinOp::RemAssign(_) => {
195                state.write_u8(22u8);
196            }
197            crate::BinOp::BitXorAssign(_) => {
198                state.write_u8(23u8);
199            }
200            crate::BinOp::BitAndAssign(_) => {
201                state.write_u8(24u8);
202            }
203            crate::BinOp::BitOrAssign(_) => {
204                state.write_u8(25u8);
205            }
206            crate::BinOp::ShlAssign(_) => {
207                state.write_u8(26u8);
208            }
209            crate::BinOp::ShrAssign(_) => {
210                state.write_u8(27u8);
211            }
212        }
213    }
214}
215#[cfg(feature = "full")]
216#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
217impl Hash for crate::Block {
218    fn hash<H>(&self, state: &mut H)
219    where
220        H: Hasher,
221    {
222        self.stmts.hash(state);
223    }
224}
225#[cfg(any(feature = "derive", feature = "full"))]
226#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
227impl Hash for crate::BoundLifetimes {
228    fn hash<H>(&self, state: &mut H)
229    where
230        H: Hasher,
231    {
232        self.lifetimes.hash(state);
233    }
234}
235#[cfg(feature = "full")]
236#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
237impl Hash for crate::CapturedParam {
238    fn hash<H>(&self, state: &mut H)
239    where
240        H: Hasher,
241    {
242        match self {
243            crate::CapturedParam::Lifetime(v0) => {
244                state.write_u8(0u8);
245                v0.hash(state);
246            }
247            crate::CapturedParam::Ident(v0) => {
248                state.write_u8(1u8);
249                v0.hash(state);
250            }
251        }
252    }
253}
254#[cfg(any(feature = "derive", feature = "full"))]
255#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
256impl Hash for crate::ConstParam {
257    fn hash<H>(&self, state: &mut H)
258    where
259        H: Hasher,
260    {
261        self.attrs.hash(state);
262        self.ident.hash(state);
263        self.ty.hash(state);
264        self.eq_token.hash(state);
265        self.default.hash(state);
266    }
267}
268#[cfg(any(feature = "derive", feature = "full"))]
269#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
270impl Hash for crate::Constraint {
271    fn hash<H>(&self, state: &mut H)
272    where
273        H: Hasher,
274    {
275        self.ident.hash(state);
276        self.generics.hash(state);
277        self.bounds.hash(state);
278    }
279}
280#[cfg(feature = "derive")]
281#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
282impl Hash for crate::Data {
283    fn hash<H>(&self, state: &mut H)
284    where
285        H: Hasher,
286    {
287        match self {
288            crate::Data::Struct(v0) => {
289                state.write_u8(0u8);
290                v0.hash(state);
291            }
292            crate::Data::Enum(v0) => {
293                state.write_u8(1u8);
294                v0.hash(state);
295            }
296            crate::Data::Union(v0) => {
297                state.write_u8(2u8);
298                v0.hash(state);
299            }
300        }
301    }
302}
303#[cfg(feature = "derive")]
304#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
305impl Hash for crate::DataEnum {
306    fn hash<H>(&self, state: &mut H)
307    where
308        H: Hasher,
309    {
310        self.variants.hash(state);
311    }
312}
313#[cfg(feature = "derive")]
314#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
315impl Hash for crate::DataStruct {
316    fn hash<H>(&self, state: &mut H)
317    where
318        H: Hasher,
319    {
320        self.fields.hash(state);
321        self.semi_token.hash(state);
322    }
323}
324#[cfg(feature = "derive")]
325#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
326impl Hash for crate::DataUnion {
327    fn hash<H>(&self, state: &mut H)
328    where
329        H: Hasher,
330    {
331        self.fields.hash(state);
332    }
333}
334#[cfg(feature = "derive")]
335#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
336impl Hash for crate::DeriveInput {
337    fn hash<H>(&self, state: &mut H)
338    where
339        H: Hasher,
340    {
341        self.attrs.hash(state);
342        self.vis.hash(state);
343        self.ident.hash(state);
344        self.generics.hash(state);
345        self.data.hash(state);
346    }
347}
348#[cfg(any(feature = "derive", feature = "full"))]
349#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
350impl Hash for crate::Expr {
351    fn hash<H>(&self, state: &mut H)
352    where
353        H: Hasher,
354    {
355        match self {
356            #[cfg(feature = "full")]
357            crate::Expr::Array(v0) => {
358                state.write_u8(0u8);
359                v0.hash(state);
360            }
361            #[cfg(feature = "full")]
362            crate::Expr::Assign(v0) => {
363                state.write_u8(1u8);
364                v0.hash(state);
365            }
366            #[cfg(feature = "full")]
367            crate::Expr::Async(v0) => {
368                state.write_u8(2u8);
369                v0.hash(state);
370            }
371            #[cfg(feature = "full")]
372            crate::Expr::Await(v0) => {
373                state.write_u8(3u8);
374                v0.hash(state);
375            }
376            crate::Expr::Binary(v0) => {
377                state.write_u8(4u8);
378                v0.hash(state);
379            }
380            #[cfg(feature = "full")]
381            crate::Expr::Block(v0) => {
382                state.write_u8(5u8);
383                v0.hash(state);
384            }
385            #[cfg(feature = "full")]
386            crate::Expr::Break(v0) => {
387                state.write_u8(6u8);
388                v0.hash(state);
389            }
390            crate::Expr::Call(v0) => {
391                state.write_u8(7u8);
392                v0.hash(state);
393            }
394            crate::Expr::Cast(v0) => {
395                state.write_u8(8u8);
396                v0.hash(state);
397            }
398            #[cfg(feature = "full")]
399            crate::Expr::Closure(v0) => {
400                state.write_u8(9u8);
401                v0.hash(state);
402            }
403            #[cfg(feature = "full")]
404            crate::Expr::Const(v0) => {
405                state.write_u8(10u8);
406                v0.hash(state);
407            }
408            #[cfg(feature = "full")]
409            crate::Expr::Continue(v0) => {
410                state.write_u8(11u8);
411                v0.hash(state);
412            }
413            crate::Expr::Field(v0) => {
414                state.write_u8(12u8);
415                v0.hash(state);
416            }
417            #[cfg(feature = "full")]
418            crate::Expr::ForLoop(v0) => {
419                state.write_u8(13u8);
420                v0.hash(state);
421            }
422            crate::Expr::Group(v0) => {
423                state.write_u8(14u8);
424                v0.hash(state);
425            }
426            #[cfg(feature = "full")]
427            crate::Expr::If(v0) => {
428                state.write_u8(15u8);
429                v0.hash(state);
430            }
431            crate::Expr::Index(v0) => {
432                state.write_u8(16u8);
433                v0.hash(state);
434            }
435            #[cfg(feature = "full")]
436            crate::Expr::Infer(v0) => {
437                state.write_u8(17u8);
438                v0.hash(state);
439            }
440            #[cfg(feature = "full")]
441            crate::Expr::Let(v0) => {
442                state.write_u8(18u8);
443                v0.hash(state);
444            }
445            crate::Expr::Lit(v0) => {
446                state.write_u8(19u8);
447                v0.hash(state);
448            }
449            #[cfg(feature = "full")]
450            crate::Expr::Loop(v0) => {
451                state.write_u8(20u8);
452                v0.hash(state);
453            }
454            crate::Expr::Macro(v0) => {
455                state.write_u8(21u8);
456                v0.hash(state);
457            }
458            #[cfg(feature = "full")]
459            crate::Expr::Match(v0) => {
460                state.write_u8(22u8);
461                v0.hash(state);
462            }
463            crate::Expr::MethodCall(v0) => {
464                state.write_u8(23u8);
465                v0.hash(state);
466            }
467            crate::Expr::Paren(v0) => {
468                state.write_u8(24u8);
469                v0.hash(state);
470            }
471            crate::Expr::Path(v0) => {
472                state.write_u8(25u8);
473                v0.hash(state);
474            }
475            #[cfg(feature = "full")]
476            crate::Expr::Range(v0) => {
477                state.write_u8(26u8);
478                v0.hash(state);
479            }
480            #[cfg(feature = "full")]
481            crate::Expr::RawAddr(v0) => {
482                state.write_u8(27u8);
483                v0.hash(state);
484            }
485            crate::Expr::Reference(v0) => {
486                state.write_u8(28u8);
487                v0.hash(state);
488            }
489            #[cfg(feature = "full")]
490            crate::Expr::Repeat(v0) => {
491                state.write_u8(29u8);
492                v0.hash(state);
493            }
494            #[cfg(feature = "full")]
495            crate::Expr::Return(v0) => {
496                state.write_u8(30u8);
497                v0.hash(state);
498            }
499            crate::Expr::Struct(v0) => {
500                state.write_u8(31u8);
501                v0.hash(state);
502            }
503            #[cfg(feature = "full")]
504            crate::Expr::Try(v0) => {
505                state.write_u8(32u8);
506                v0.hash(state);
507            }
508            #[cfg(feature = "full")]
509            crate::Expr::TryBlock(v0) => {
510                state.write_u8(33u8);
511                v0.hash(state);
512            }
513            crate::Expr::Tuple(v0) => {
514                state.write_u8(34u8);
515                v0.hash(state);
516            }
517            crate::Expr::Unary(v0) => {
518                state.write_u8(35u8);
519                v0.hash(state);
520            }
521            #[cfg(feature = "full")]
522            crate::Expr::Unsafe(v0) => {
523                state.write_u8(36u8);
524                v0.hash(state);
525            }
526            crate::Expr::Verbatim(v0) => {
527                state.write_u8(37u8);
528                TokenStreamHelper(v0).hash(state);
529            }
530            #[cfg(feature = "full")]
531            crate::Expr::While(v0) => {
532                state.write_u8(38u8);
533                v0.hash(state);
534            }
535            #[cfg(feature = "full")]
536            crate::Expr::Yield(v0) => {
537                state.write_u8(39u8);
538                v0.hash(state);
539            }
540            #[cfg(not(feature = "full"))]
541            _ => unreachable!(),
542        }
543    }
544}
545#[cfg(feature = "full")]
546#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
547impl Hash for crate::ExprArray {
548    fn hash<H>(&self, state: &mut H)
549    where
550        H: Hasher,
551    {
552        self.attrs.hash(state);
553        self.elems.hash(state);
554    }
555}
556#[cfg(feature = "full")]
557#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
558impl Hash for crate::ExprAssign {
559    fn hash<H>(&self, state: &mut H)
560    where
561        H: Hasher,
562    {
563        self.attrs.hash(state);
564        self.left.hash(state);
565        self.right.hash(state);
566    }
567}
568#[cfg(feature = "full")]
569#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
570impl Hash for crate::ExprAsync {
571    fn hash<H>(&self, state: &mut H)
572    where
573        H: Hasher,
574    {
575        self.attrs.hash(state);
576        self.capture.hash(state);
577        self.block.hash(state);
578    }
579}
580#[cfg(feature = "full")]
581#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
582impl Hash for crate::ExprAwait {
583    fn hash<H>(&self, state: &mut H)
584    where
585        H: Hasher,
586    {
587        self.attrs.hash(state);
588        self.base.hash(state);
589    }
590}
591#[cfg(any(feature = "derive", feature = "full"))]
592#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
593impl Hash for crate::ExprBinary {
594    fn hash<H>(&self, state: &mut H)
595    where
596        H: Hasher,
597    {
598        self.attrs.hash(state);
599        self.left.hash(state);
600        self.op.hash(state);
601        self.right.hash(state);
602    }
603}
604#[cfg(feature = "full")]
605#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
606impl Hash for crate::ExprBlock {
607    fn hash<H>(&self, state: &mut H)
608    where
609        H: Hasher,
610    {
611        self.attrs.hash(state);
612        self.label.hash(state);
613        self.block.hash(state);
614    }
615}
616#[cfg(feature = "full")]
617#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
618impl Hash for crate::ExprBreak {
619    fn hash<H>(&self, state: &mut H)
620    where
621        H: Hasher,
622    {
623        self.attrs.hash(state);
624        self.label.hash(state);
625        self.expr.hash(state);
626    }
627}
628#[cfg(any(feature = "derive", feature = "full"))]
629#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
630impl Hash for crate::ExprCall {
631    fn hash<H>(&self, state: &mut H)
632    where
633        H: Hasher,
634    {
635        self.attrs.hash(state);
636        self.func.hash(state);
637        self.args.hash(state);
638    }
639}
640#[cfg(any(feature = "derive", feature = "full"))]
641#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
642impl Hash for crate::ExprCast {
643    fn hash<H>(&self, state: &mut H)
644    where
645        H: Hasher,
646    {
647        self.attrs.hash(state);
648        self.expr.hash(state);
649        self.ty.hash(state);
650    }
651}
652#[cfg(feature = "full")]
653#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
654impl Hash for crate::ExprClosure {
655    fn hash<H>(&self, state: &mut H)
656    where
657        H: Hasher,
658    {
659        self.attrs.hash(state);
660        self.lifetimes.hash(state);
661        self.constness.hash(state);
662        self.movability.hash(state);
663        self.asyncness.hash(state);
664        self.capture.hash(state);
665        self.inputs.hash(state);
666        self.output.hash(state);
667        self.body.hash(state);
668    }
669}
670#[cfg(feature = "full")]
671#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
672impl Hash for crate::ExprConst {
673    fn hash<H>(&self, state: &mut H)
674    where
675        H: Hasher,
676    {
677        self.attrs.hash(state);
678        self.block.hash(state);
679    }
680}
681#[cfg(feature = "full")]
682#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
683impl Hash for crate::ExprContinue {
684    fn hash<H>(&self, state: &mut H)
685    where
686        H: Hasher,
687    {
688        self.attrs.hash(state);
689        self.label.hash(state);
690    }
691}
692#[cfg(any(feature = "derive", feature = "full"))]
693#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
694impl Hash for crate::ExprField {
695    fn hash<H>(&self, state: &mut H)
696    where
697        H: Hasher,
698    {
699        self.attrs.hash(state);
700        self.base.hash(state);
701        self.member.hash(state);
702    }
703}
704#[cfg(feature = "full")]
705#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
706impl Hash for crate::ExprForLoop {
707    fn hash<H>(&self, state: &mut H)
708    where
709        H: Hasher,
710    {
711        self.attrs.hash(state);
712        self.label.hash(state);
713        self.pat.hash(state);
714        self.expr.hash(state);
715        self.body.hash(state);
716    }
717}
718#[cfg(any(feature = "derive", feature = "full"))]
719#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
720impl Hash for crate::ExprGroup {
721    fn hash<H>(&self, state: &mut H)
722    where
723        H: Hasher,
724    {
725        self.attrs.hash(state);
726        self.expr.hash(state);
727    }
728}
729#[cfg(feature = "full")]
730#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
731impl Hash for crate::ExprIf {
732    fn hash<H>(&self, state: &mut H)
733    where
734        H: Hasher,
735    {
736        self.attrs.hash(state);
737        self.cond.hash(state);
738        self.then_branch.hash(state);
739        self.else_branch.hash(state);
740    }
741}
742#[cfg(any(feature = "derive", feature = "full"))]
743#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
744impl Hash for crate::ExprIndex {
745    fn hash<H>(&self, state: &mut H)
746    where
747        H: Hasher,
748    {
749        self.attrs.hash(state);
750        self.expr.hash(state);
751        self.index.hash(state);
752    }
753}
754#[cfg(feature = "full")]
755#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
756impl Hash for crate::ExprInfer {
757    fn hash<H>(&self, state: &mut H)
758    where
759        H: Hasher,
760    {
761        self.attrs.hash(state);
762    }
763}
764#[cfg(feature = "full")]
765#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
766impl Hash for crate::ExprLet {
767    fn hash<H>(&self, state: &mut H)
768    where
769        H: Hasher,
770    {
771        self.attrs.hash(state);
772        self.pat.hash(state);
773        self.expr.hash(state);
774    }
775}
776#[cfg(any(feature = "derive", feature = "full"))]
777#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
778impl Hash for crate::ExprLit {
779    fn hash<H>(&self, state: &mut H)
780    where
781        H: Hasher,
782    {
783        self.attrs.hash(state);
784        self.lit.hash(state);
785    }
786}
787#[cfg(feature = "full")]
788#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
789impl Hash for crate::ExprLoop {
790    fn hash<H>(&self, state: &mut H)
791    where
792        H: Hasher,
793    {
794        self.attrs.hash(state);
795        self.label.hash(state);
796        self.body.hash(state);
797    }
798}
799#[cfg(any(feature = "derive", feature = "full"))]
800#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
801impl Hash for crate::ExprMacro {
802    fn hash<H>(&self, state: &mut H)
803    where
804        H: Hasher,
805    {
806        self.attrs.hash(state);
807        self.mac.hash(state);
808    }
809}
810#[cfg(feature = "full")]
811#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
812impl Hash for crate::ExprMatch {
813    fn hash<H>(&self, state: &mut H)
814    where
815        H: Hasher,
816    {
817        self.attrs.hash(state);
818        self.expr.hash(state);
819        self.arms.hash(state);
820    }
821}
822#[cfg(any(feature = "derive", feature = "full"))]
823#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
824impl Hash for crate::ExprMethodCall {
825    fn hash<H>(&self, state: &mut H)
826    where
827        H: Hasher,
828    {
829        self.attrs.hash(state);
830        self.receiver.hash(state);
831        self.method.hash(state);
832        self.turbofish.hash(state);
833        self.args.hash(state);
834    }
835}
836#[cfg(any(feature = "derive", feature = "full"))]
837#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
838impl Hash for crate::ExprParen {
839    fn hash<H>(&self, state: &mut H)
840    where
841        H: Hasher,
842    {
843        self.attrs.hash(state);
844        self.expr.hash(state);
845    }
846}
847#[cfg(any(feature = "derive", feature = "full"))]
848#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
849impl Hash for crate::ExprPath {
850    fn hash<H>(&self, state: &mut H)
851    where
852        H: Hasher,
853    {
854        self.attrs.hash(state);
855        self.qself.hash(state);
856        self.path.hash(state);
857    }
858}
859#[cfg(feature = "full")]
860#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
861impl Hash for crate::ExprRange {
862    fn hash<H>(&self, state: &mut H)
863    where
864        H: Hasher,
865    {
866        self.attrs.hash(state);
867        self.start.hash(state);
868        self.limits.hash(state);
869        self.end.hash(state);
870    }
871}
872#[cfg(feature = "full")]
873#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
874impl Hash for crate::ExprRawAddr {
875    fn hash<H>(&self, state: &mut H)
876    where
877        H: Hasher,
878    {
879        self.attrs.hash(state);
880        self.mutability.hash(state);
881        self.expr.hash(state);
882    }
883}
884#[cfg(any(feature = "derive", feature = "full"))]
885#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
886impl Hash for crate::ExprReference {
887    fn hash<H>(&self, state: &mut H)
888    where
889        H: Hasher,
890    {
891        self.attrs.hash(state);
892        self.mutability.hash(state);
893        self.expr.hash(state);
894    }
895}
896#[cfg(feature = "full")]
897#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
898impl Hash for crate::ExprRepeat {
899    fn hash<H>(&self, state: &mut H)
900    where
901        H: Hasher,
902    {
903        self.attrs.hash(state);
904        self.expr.hash(state);
905        self.len.hash(state);
906    }
907}
908#[cfg(feature = "full")]
909#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
910impl Hash for crate::ExprReturn {
911    fn hash<H>(&self, state: &mut H)
912    where
913        H: Hasher,
914    {
915        self.attrs.hash(state);
916        self.expr.hash(state);
917    }
918}
919#[cfg(any(feature = "derive", feature = "full"))]
920#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
921impl Hash for crate::ExprStruct {
922    fn hash<H>(&self, state: &mut H)
923    where
924        H: Hasher,
925    {
926        self.attrs.hash(state);
927        self.qself.hash(state);
928        self.path.hash(state);
929        self.fields.hash(state);
930        self.dot2_token.hash(state);
931        self.rest.hash(state);
932    }
933}
934#[cfg(feature = "full")]
935#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
936impl Hash for crate::ExprTry {
937    fn hash<H>(&self, state: &mut H)
938    where
939        H: Hasher,
940    {
941        self.attrs.hash(state);
942        self.expr.hash(state);
943    }
944}
945#[cfg(feature = "full")]
946#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
947impl Hash for crate::ExprTryBlock {
948    fn hash<H>(&self, state: &mut H)
949    where
950        H: Hasher,
951    {
952        self.attrs.hash(state);
953        self.block.hash(state);
954    }
955}
956#[cfg(any(feature = "derive", feature = "full"))]
957#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
958impl Hash for crate::ExprTuple {
959    fn hash<H>(&self, state: &mut H)
960    where
961        H: Hasher,
962    {
963        self.attrs.hash(state);
964        self.elems.hash(state);
965    }
966}
967#[cfg(any(feature = "derive", feature = "full"))]
968#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
969impl Hash for crate::ExprUnary {
970    fn hash<H>(&self, state: &mut H)
971    where
972        H: Hasher,
973    {
974        self.attrs.hash(state);
975        self.op.hash(state);
976        self.expr.hash(state);
977    }
978}
979#[cfg(feature = "full")]
980#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
981impl Hash for crate::ExprUnsafe {
982    fn hash<H>(&self, state: &mut H)
983    where
984        H: Hasher,
985    {
986        self.attrs.hash(state);
987        self.block.hash(state);
988    }
989}
990#[cfg(feature = "full")]
991#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
992impl Hash for crate::ExprWhile {
993    fn hash<H>(&self, state: &mut H)
994    where
995        H: Hasher,
996    {
997        self.attrs.hash(state);
998        self.label.hash(state);
999        self.cond.hash(state);
1000        self.body.hash(state);
1001    }
1002}
1003#[cfg(feature = "full")]
1004#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1005impl Hash for crate::ExprYield {
1006    fn hash<H>(&self, state: &mut H)
1007    where
1008        H: Hasher,
1009    {
1010        self.attrs.hash(state);
1011        self.expr.hash(state);
1012    }
1013}
1014#[cfg(any(feature = "derive", feature = "full"))]
1015#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1016impl Hash for crate::Field {
1017    fn hash<H>(&self, state: &mut H)
1018    where
1019        H: Hasher,
1020    {
1021        self.attrs.hash(state);
1022        self.vis.hash(state);
1023        self.mutability.hash(state);
1024        self.ident.hash(state);
1025        self.colon_token.hash(state);
1026        self.ty.hash(state);
1027    }
1028}
1029#[cfg(any(feature = "derive", feature = "full"))]
1030#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1031impl Hash for crate::FieldMutability {
1032    fn hash<H>(&self, state: &mut H)
1033    where
1034        H: Hasher,
1035    {
1036        match self {
1037            crate::FieldMutability::None => {
1038                state.write_u8(0u8);
1039            }
1040        }
1041    }
1042}
1043#[cfg(feature = "full")]
1044#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1045impl Hash for crate::FieldPat {
1046    fn hash<H>(&self, state: &mut H)
1047    where
1048        H: Hasher,
1049    {
1050        self.attrs.hash(state);
1051        self.member.hash(state);
1052        self.colon_token.hash(state);
1053        self.pat.hash(state);
1054    }
1055}
1056#[cfg(any(feature = "derive", feature = "full"))]
1057#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1058impl Hash for crate::FieldValue {
1059    fn hash<H>(&self, state: &mut H)
1060    where
1061        H: Hasher,
1062    {
1063        self.attrs.hash(state);
1064        self.member.hash(state);
1065        self.colon_token.hash(state);
1066        self.expr.hash(state);
1067    }
1068}
1069#[cfg(any(feature = "derive", feature = "full"))]
1070#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1071impl Hash for crate::Fields {
1072    fn hash<H>(&self, state: &mut H)
1073    where
1074        H: Hasher,
1075    {
1076        match self {
1077            crate::Fields::Named(v0) => {
1078                state.write_u8(0u8);
1079                v0.hash(state);
1080            }
1081            crate::Fields::Unnamed(v0) => {
1082                state.write_u8(1u8);
1083                v0.hash(state);
1084            }
1085            crate::Fields::Unit => {
1086                state.write_u8(2u8);
1087            }
1088        }
1089    }
1090}
1091#[cfg(any(feature = "derive", feature = "full"))]
1092#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1093impl Hash for crate::FieldsNamed {
1094    fn hash<H>(&self, state: &mut H)
1095    where
1096        H: Hasher,
1097    {
1098        self.named.hash(state);
1099    }
1100}
1101#[cfg(any(feature = "derive", feature = "full"))]
1102#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1103impl Hash for crate::FieldsUnnamed {
1104    fn hash<H>(&self, state: &mut H)
1105    where
1106        H: Hasher,
1107    {
1108        self.unnamed.hash(state);
1109    }
1110}
1111#[cfg(feature = "full")]
1112#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1113impl Hash for crate::File {
1114    fn hash<H>(&self, state: &mut H)
1115    where
1116        H: Hasher,
1117    {
1118        self.shebang.hash(state);
1119        self.attrs.hash(state);
1120        self.items.hash(state);
1121    }
1122}
1123#[cfg(feature = "full")]
1124#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1125impl Hash for crate::FnArg {
1126    fn hash<H>(&self, state: &mut H)
1127    where
1128        H: Hasher,
1129    {
1130        match self {
1131            crate::FnArg::Receiver(v0) => {
1132                state.write_u8(0u8);
1133                v0.hash(state);
1134            }
1135            crate::FnArg::Typed(v0) => {
1136                state.write_u8(1u8);
1137                v0.hash(state);
1138            }
1139        }
1140    }
1141}
1142#[cfg(feature = "full")]
1143#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1144impl Hash for crate::ForeignItem {
1145    fn hash<H>(&self, state: &mut H)
1146    where
1147        H: Hasher,
1148    {
1149        match self {
1150            crate::ForeignItem::Fn(v0) => {
1151                state.write_u8(0u8);
1152                v0.hash(state);
1153            }
1154            crate::ForeignItem::Static(v0) => {
1155                state.write_u8(1u8);
1156                v0.hash(state);
1157            }
1158            crate::ForeignItem::Type(v0) => {
1159                state.write_u8(2u8);
1160                v0.hash(state);
1161            }
1162            crate::ForeignItem::Macro(v0) => {
1163                state.write_u8(3u8);
1164                v0.hash(state);
1165            }
1166            crate::ForeignItem::Verbatim(v0) => {
1167                state.write_u8(4u8);
1168                TokenStreamHelper(v0).hash(state);
1169            }
1170        }
1171    }
1172}
1173#[cfg(feature = "full")]
1174#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1175impl Hash for crate::ForeignItemFn {
1176    fn hash<H>(&self, state: &mut H)
1177    where
1178        H: Hasher,
1179    {
1180        self.attrs.hash(state);
1181        self.vis.hash(state);
1182        self.sig.hash(state);
1183    }
1184}
1185#[cfg(feature = "full")]
1186#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1187impl Hash for crate::ForeignItemMacro {
1188    fn hash<H>(&self, state: &mut H)
1189    where
1190        H: Hasher,
1191    {
1192        self.attrs.hash(state);
1193        self.mac.hash(state);
1194        self.semi_token.hash(state);
1195    }
1196}
1197#[cfg(feature = "full")]
1198#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1199impl Hash for crate::ForeignItemStatic {
1200    fn hash<H>(&self, state: &mut H)
1201    where
1202        H: Hasher,
1203    {
1204        self.attrs.hash(state);
1205        self.vis.hash(state);
1206        self.mutability.hash(state);
1207        self.ident.hash(state);
1208        self.ty.hash(state);
1209    }
1210}
1211#[cfg(feature = "full")]
1212#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1213impl Hash for crate::ForeignItemType {
1214    fn hash<H>(&self, state: &mut H)
1215    where
1216        H: Hasher,
1217    {
1218        self.attrs.hash(state);
1219        self.vis.hash(state);
1220        self.ident.hash(state);
1221        self.generics.hash(state);
1222    }
1223}
1224#[cfg(any(feature = "derive", feature = "full"))]
1225#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1226impl Hash for crate::GenericArgument {
1227    fn hash<H>(&self, state: &mut H)
1228    where
1229        H: Hasher,
1230    {
1231        match self {
1232            crate::GenericArgument::Lifetime(v0) => {
1233                state.write_u8(0u8);
1234                v0.hash(state);
1235            }
1236            crate::GenericArgument::Type(v0) => {
1237                state.write_u8(1u8);
1238                v0.hash(state);
1239            }
1240            crate::GenericArgument::Const(v0) => {
1241                state.write_u8(2u8);
1242                v0.hash(state);
1243            }
1244            crate::GenericArgument::AssocType(v0) => {
1245                state.write_u8(3u8);
1246                v0.hash(state);
1247            }
1248            crate::GenericArgument::AssocConst(v0) => {
1249                state.write_u8(4u8);
1250                v0.hash(state);
1251            }
1252            crate::GenericArgument::Constraint(v0) => {
1253                state.write_u8(5u8);
1254                v0.hash(state);
1255            }
1256        }
1257    }
1258}
1259#[cfg(any(feature = "derive", feature = "full"))]
1260#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1261impl Hash for crate::GenericParam {
1262    fn hash<H>(&self, state: &mut H)
1263    where
1264        H: Hasher,
1265    {
1266        match self {
1267            crate::GenericParam::Lifetime(v0) => {
1268                state.write_u8(0u8);
1269                v0.hash(state);
1270            }
1271            crate::GenericParam::Type(v0) => {
1272                state.write_u8(1u8);
1273                v0.hash(state);
1274            }
1275            crate::GenericParam::Const(v0) => {
1276                state.write_u8(2u8);
1277                v0.hash(state);
1278            }
1279        }
1280    }
1281}
1282#[cfg(any(feature = "derive", feature = "full"))]
1283#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1284impl Hash for crate::Generics {
1285    fn hash<H>(&self, state: &mut H)
1286    where
1287        H: Hasher,
1288    {
1289        self.lt_token.hash(state);
1290        self.params.hash(state);
1291        self.gt_token.hash(state);
1292        self.where_clause.hash(state);
1293    }
1294}
1295#[cfg(feature = "full")]
1296#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1297impl Hash for crate::ImplItem {
1298    fn hash<H>(&self, state: &mut H)
1299    where
1300        H: Hasher,
1301    {
1302        match self {
1303            crate::ImplItem::Const(v0) => {
1304                state.write_u8(0u8);
1305                v0.hash(state);
1306            }
1307            crate::ImplItem::Fn(v0) => {
1308                state.write_u8(1u8);
1309                v0.hash(state);
1310            }
1311            crate::ImplItem::Type(v0) => {
1312                state.write_u8(2u8);
1313                v0.hash(state);
1314            }
1315            crate::ImplItem::Macro(v0) => {
1316                state.write_u8(3u8);
1317                v0.hash(state);
1318            }
1319            crate::ImplItem::Verbatim(v0) => {
1320                state.write_u8(4u8);
1321                TokenStreamHelper(v0).hash(state);
1322            }
1323        }
1324    }
1325}
1326#[cfg(feature = "full")]
1327#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1328impl Hash for crate::ImplItemConst {
1329    fn hash<H>(&self, state: &mut H)
1330    where
1331        H: Hasher,
1332    {
1333        self.attrs.hash(state);
1334        self.vis.hash(state);
1335        self.defaultness.hash(state);
1336        self.ident.hash(state);
1337        self.generics.hash(state);
1338        self.ty.hash(state);
1339        self.expr.hash(state);
1340    }
1341}
1342#[cfg(feature = "full")]
1343#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1344impl Hash for crate::ImplItemFn {
1345    fn hash<H>(&self, state: &mut H)
1346    where
1347        H: Hasher,
1348    {
1349        self.attrs.hash(state);
1350        self.vis.hash(state);
1351        self.defaultness.hash(state);
1352        self.sig.hash(state);
1353        self.block.hash(state);
1354    }
1355}
1356#[cfg(feature = "full")]
1357#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1358impl Hash for crate::ImplItemMacro {
1359    fn hash<H>(&self, state: &mut H)
1360    where
1361        H: Hasher,
1362    {
1363        self.attrs.hash(state);
1364        self.mac.hash(state);
1365        self.semi_token.hash(state);
1366    }
1367}
1368#[cfg(feature = "full")]
1369#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1370impl Hash for crate::ImplItemType {
1371    fn hash<H>(&self, state: &mut H)
1372    where
1373        H: Hasher,
1374    {
1375        self.attrs.hash(state);
1376        self.vis.hash(state);
1377        self.defaultness.hash(state);
1378        self.ident.hash(state);
1379        self.generics.hash(state);
1380        self.ty.hash(state);
1381    }
1382}
1383#[cfg(feature = "full")]
1384#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1385impl Hash for crate::ImplRestriction {
1386    fn hash<H>(&self, _state: &mut H)
1387    where
1388        H: Hasher,
1389    {
1390        match *self {}
1391    }
1392}
1393#[cfg(feature = "full")]
1394#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1395impl Hash for crate::Item {
1396    fn hash<H>(&self, state: &mut H)
1397    where
1398        H: Hasher,
1399    {
1400        match self {
1401            crate::Item::Const(v0) => {
1402                state.write_u8(0u8);
1403                v0.hash(state);
1404            }
1405            crate::Item::Enum(v0) => {
1406                state.write_u8(1u8);
1407                v0.hash(state);
1408            }
1409            crate::Item::ExternCrate(v0) => {
1410                state.write_u8(2u8);
1411                v0.hash(state);
1412            }
1413            crate::Item::Fn(v0) => {
1414                state.write_u8(3u8);
1415                v0.hash(state);
1416            }
1417            crate::Item::ForeignMod(v0) => {
1418                state.write_u8(4u8);
1419                v0.hash(state);
1420            }
1421            crate::Item::Impl(v0) => {
1422                state.write_u8(5u8);
1423                v0.hash(state);
1424            }
1425            crate::Item::Macro(v0) => {
1426                state.write_u8(6u8);
1427                v0.hash(state);
1428            }
1429            crate::Item::Mod(v0) => {
1430                state.write_u8(7u8);
1431                v0.hash(state);
1432            }
1433            crate::Item::Static(v0) => {
1434                state.write_u8(8u8);
1435                v0.hash(state);
1436            }
1437            crate::Item::Struct(v0) => {
1438                state.write_u8(9u8);
1439                v0.hash(state);
1440            }
1441            crate::Item::Trait(v0) => {
1442                state.write_u8(10u8);
1443                v0.hash(state);
1444            }
1445            crate::Item::TraitAlias(v0) => {
1446                state.write_u8(11u8);
1447                v0.hash(state);
1448            }
1449            crate::Item::Type(v0) => {
1450                state.write_u8(12u8);
1451                v0.hash(state);
1452            }
1453            crate::Item::Union(v0) => {
1454                state.write_u8(13u8);
1455                v0.hash(state);
1456            }
1457            crate::Item::Use(v0) => {
1458                state.write_u8(14u8);
1459                v0.hash(state);
1460            }
1461            crate::Item::Verbatim(v0) => {
1462                state.write_u8(15u8);
1463                TokenStreamHelper(v0).hash(state);
1464            }
1465        }
1466    }
1467}
1468#[cfg(feature = "full")]
1469#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1470impl Hash for crate::ItemConst {
1471    fn hash<H>(&self, state: &mut H)
1472    where
1473        H: Hasher,
1474    {
1475        self.attrs.hash(state);
1476        self.vis.hash(state);
1477        self.ident.hash(state);
1478        self.generics.hash(state);
1479        self.ty.hash(state);
1480        self.expr.hash(state);
1481    }
1482}
1483#[cfg(feature = "full")]
1484#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1485impl Hash for crate::ItemEnum {
1486    fn hash<H>(&self, state: &mut H)
1487    where
1488        H: Hasher,
1489    {
1490        self.attrs.hash(state);
1491        self.vis.hash(state);
1492        self.ident.hash(state);
1493        self.generics.hash(state);
1494        self.variants.hash(state);
1495    }
1496}
1497#[cfg(feature = "full")]
1498#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1499impl Hash for crate::ItemExternCrate {
1500    fn hash<H>(&self, state: &mut H)
1501    where
1502        H: Hasher,
1503    {
1504        self.attrs.hash(state);
1505        self.vis.hash(state);
1506        self.ident.hash(state);
1507        self.rename.hash(state);
1508    }
1509}
1510#[cfg(feature = "full")]
1511#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1512impl Hash for crate::ItemFn {
1513    fn hash<H>(&self, state: &mut H)
1514    where
1515        H: Hasher,
1516    {
1517        self.attrs.hash(state);
1518        self.vis.hash(state);
1519        self.sig.hash(state);
1520        self.block.hash(state);
1521    }
1522}
1523#[cfg(feature = "full")]
1524#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1525impl Hash for crate::ItemForeignMod {
1526    fn hash<H>(&self, state: &mut H)
1527    where
1528        H: Hasher,
1529    {
1530        self.attrs.hash(state);
1531        self.unsafety.hash(state);
1532        self.abi.hash(state);
1533        self.items.hash(state);
1534    }
1535}
1536#[cfg(feature = "full")]
1537#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1538impl Hash for crate::ItemImpl {
1539    fn hash<H>(&self, state: &mut H)
1540    where
1541        H: Hasher,
1542    {
1543        self.attrs.hash(state);
1544        self.defaultness.hash(state);
1545        self.unsafety.hash(state);
1546        self.generics.hash(state);
1547        self.trait_.hash(state);
1548        self.self_ty.hash(state);
1549        self.items.hash(state);
1550    }
1551}
1552#[cfg(feature = "full")]
1553#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1554impl Hash for crate::ItemMacro {
1555    fn hash<H>(&self, state: &mut H)
1556    where
1557        H: Hasher,
1558    {
1559        self.attrs.hash(state);
1560        self.ident.hash(state);
1561        self.mac.hash(state);
1562        self.semi_token.hash(state);
1563    }
1564}
1565#[cfg(feature = "full")]
1566#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1567impl Hash for crate::ItemMod {
1568    fn hash<H>(&self, state: &mut H)
1569    where
1570        H: Hasher,
1571    {
1572        self.attrs.hash(state);
1573        self.vis.hash(state);
1574        self.unsafety.hash(state);
1575        self.ident.hash(state);
1576        self.content.hash(state);
1577        self.semi.hash(state);
1578    }
1579}
1580#[cfg(feature = "full")]
1581#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1582impl Hash for crate::ItemStatic {
1583    fn hash<H>(&self, state: &mut H)
1584    where
1585        H: Hasher,
1586    {
1587        self.attrs.hash(state);
1588        self.vis.hash(state);
1589        self.mutability.hash(state);
1590        self.ident.hash(state);
1591        self.ty.hash(state);
1592        self.expr.hash(state);
1593    }
1594}
1595#[cfg(feature = "full")]
1596#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1597impl Hash for crate::ItemStruct {
1598    fn hash<H>(&self, state: &mut H)
1599    where
1600        H: Hasher,
1601    {
1602        self.attrs.hash(state);
1603        self.vis.hash(state);
1604        self.ident.hash(state);
1605        self.generics.hash(state);
1606        self.fields.hash(state);
1607        self.semi_token.hash(state);
1608    }
1609}
1610#[cfg(feature = "full")]
1611#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1612impl Hash for crate::ItemTrait {
1613    fn hash<H>(&self, state: &mut H)
1614    where
1615        H: Hasher,
1616    {
1617        self.attrs.hash(state);
1618        self.vis.hash(state);
1619        self.unsafety.hash(state);
1620        self.auto_token.hash(state);
1621        self.restriction.hash(state);
1622        self.ident.hash(state);
1623        self.generics.hash(state);
1624        self.colon_token.hash(state);
1625        self.supertraits.hash(state);
1626        self.items.hash(state);
1627    }
1628}
1629#[cfg(feature = "full")]
1630#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1631impl Hash for crate::ItemTraitAlias {
1632    fn hash<H>(&self, state: &mut H)
1633    where
1634        H: Hasher,
1635    {
1636        self.attrs.hash(state);
1637        self.vis.hash(state);
1638        self.ident.hash(state);
1639        self.generics.hash(state);
1640        self.bounds.hash(state);
1641    }
1642}
1643#[cfg(feature = "full")]
1644#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1645impl Hash for crate::ItemType {
1646    fn hash<H>(&self, state: &mut H)
1647    where
1648        H: Hasher,
1649    {
1650        self.attrs.hash(state);
1651        self.vis.hash(state);
1652        self.ident.hash(state);
1653        self.generics.hash(state);
1654        self.ty.hash(state);
1655    }
1656}
1657#[cfg(feature = "full")]
1658#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1659impl Hash for crate::ItemUnion {
1660    fn hash<H>(&self, state: &mut H)
1661    where
1662        H: Hasher,
1663    {
1664        self.attrs.hash(state);
1665        self.vis.hash(state);
1666        self.ident.hash(state);
1667        self.generics.hash(state);
1668        self.fields.hash(state);
1669    }
1670}
1671#[cfg(feature = "full")]
1672#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1673impl Hash for crate::ItemUse {
1674    fn hash<H>(&self, state: &mut H)
1675    where
1676        H: Hasher,
1677    {
1678        self.attrs.hash(state);
1679        self.vis.hash(state);
1680        self.leading_colon.hash(state);
1681        self.tree.hash(state);
1682    }
1683}
1684#[cfg(feature = "full")]
1685#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1686impl Hash for crate::Label {
1687    fn hash<H>(&self, state: &mut H)
1688    where
1689        H: Hasher,
1690    {
1691        self.name.hash(state);
1692    }
1693}
1694#[cfg(any(feature = "derive", feature = "full"))]
1695#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1696impl Hash for crate::LifetimeParam {
1697    fn hash<H>(&self, state: &mut H)
1698    where
1699        H: Hasher,
1700    {
1701        self.attrs.hash(state);
1702        self.lifetime.hash(state);
1703        self.colon_token.hash(state);
1704        self.bounds.hash(state);
1705    }
1706}
1707#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1708impl Hash for crate::Lit {
1709    fn hash<H>(&self, state: &mut H)
1710    where
1711        H: Hasher,
1712    {
1713        match self {
1714            crate::Lit::Str(v0) => {
1715                state.write_u8(0u8);
1716                v0.hash(state);
1717            }
1718            crate::Lit::ByteStr(v0) => {
1719                state.write_u8(1u8);
1720                v0.hash(state);
1721            }
1722            crate::Lit::CStr(v0) => {
1723                state.write_u8(2u8);
1724                v0.hash(state);
1725            }
1726            crate::Lit::Byte(v0) => {
1727                state.write_u8(3u8);
1728                v0.hash(state);
1729            }
1730            crate::Lit::Char(v0) => {
1731                state.write_u8(4u8);
1732                v0.hash(state);
1733            }
1734            crate::Lit::Int(v0) => {
1735                state.write_u8(5u8);
1736                v0.hash(state);
1737            }
1738            crate::Lit::Float(v0) => {
1739                state.write_u8(6u8);
1740                v0.hash(state);
1741            }
1742            crate::Lit::Bool(v0) => {
1743                state.write_u8(7u8);
1744                v0.hash(state);
1745            }
1746            crate::Lit::Verbatim(v0) => {
1747                state.write_u8(8u8);
1748                v0.to_string().hash(state);
1749            }
1750        }
1751    }
1752}
1753#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1754impl Hash for crate::LitBool {
1755    fn hash<H>(&self, state: &mut H)
1756    where
1757        H: Hasher,
1758    {
1759        self.value.hash(state);
1760    }
1761}
1762#[cfg(feature = "full")]
1763#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1764impl Hash for crate::Local {
1765    fn hash<H>(&self, state: &mut H)
1766    where
1767        H: Hasher,
1768    {
1769        self.attrs.hash(state);
1770        self.pat.hash(state);
1771        self.init.hash(state);
1772    }
1773}
1774#[cfg(feature = "full")]
1775#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1776impl Hash for crate::LocalInit {
1777    fn hash<H>(&self, state: &mut H)
1778    where
1779        H: Hasher,
1780    {
1781        self.expr.hash(state);
1782        self.diverge.hash(state);
1783    }
1784}
1785#[cfg(any(feature = "derive", feature = "full"))]
1786#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1787impl Hash for crate::Macro {
1788    fn hash<H>(&self, state: &mut H)
1789    where
1790        H: Hasher,
1791    {
1792        self.path.hash(state);
1793        self.delimiter.hash(state);
1794        TokenStreamHelper(&self.tokens).hash(state);
1795    }
1796}
1797#[cfg(any(feature = "derive", feature = "full"))]
1798#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1799impl Hash for crate::MacroDelimiter {
1800    fn hash<H>(&self, state: &mut H)
1801    where
1802        H: Hasher,
1803    {
1804        match self {
1805            crate::MacroDelimiter::Paren(_) => {
1806                state.write_u8(0u8);
1807            }
1808            crate::MacroDelimiter::Brace(_) => {
1809                state.write_u8(1u8);
1810            }
1811            crate::MacroDelimiter::Bracket(_) => {
1812                state.write_u8(2u8);
1813            }
1814        }
1815    }
1816}
1817#[cfg(any(feature = "derive", feature = "full"))]
1818#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1819impl Hash for crate::Meta {
1820    fn hash<H>(&self, state: &mut H)
1821    where
1822        H: Hasher,
1823    {
1824        match self {
1825            crate::Meta::Path(v0) => {
1826                state.write_u8(0u8);
1827                v0.hash(state);
1828            }
1829            crate::Meta::List(v0) => {
1830                state.write_u8(1u8);
1831                v0.hash(state);
1832            }
1833            crate::Meta::NameValue(v0) => {
1834                state.write_u8(2u8);
1835                v0.hash(state);
1836            }
1837        }
1838    }
1839}
1840#[cfg(any(feature = "derive", feature = "full"))]
1841#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1842impl Hash for crate::MetaList {
1843    fn hash<H>(&self, state: &mut H)
1844    where
1845        H: Hasher,
1846    {
1847        self.path.hash(state);
1848        self.delimiter.hash(state);
1849        TokenStreamHelper(&self.tokens).hash(state);
1850    }
1851}
1852#[cfg(any(feature = "derive", feature = "full"))]
1853#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1854impl Hash for crate::MetaNameValue {
1855    fn hash<H>(&self, state: &mut H)
1856    where
1857        H: Hasher,
1858    {
1859        self.path.hash(state);
1860        self.value.hash(state);
1861    }
1862}
1863#[cfg(any(feature = "derive", feature = "full"))]
1864#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1865impl Hash for crate::ParenthesizedGenericArguments {
1866    fn hash<H>(&self, state: &mut H)
1867    where
1868        H: Hasher,
1869    {
1870        self.inputs.hash(state);
1871        self.output.hash(state);
1872    }
1873}
1874#[cfg(feature = "full")]
1875#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1876impl Hash for crate::Pat {
1877    fn hash<H>(&self, state: &mut H)
1878    where
1879        H: Hasher,
1880    {
1881        match self {
1882            crate::Pat::Const(v0) => {
1883                state.write_u8(0u8);
1884                v0.hash(state);
1885            }
1886            crate::Pat::Ident(v0) => {
1887                state.write_u8(1u8);
1888                v0.hash(state);
1889            }
1890            crate::Pat::Lit(v0) => {
1891                state.write_u8(2u8);
1892                v0.hash(state);
1893            }
1894            crate::Pat::Macro(v0) => {
1895                state.write_u8(3u8);
1896                v0.hash(state);
1897            }
1898            crate::Pat::Or(v0) => {
1899                state.write_u8(4u8);
1900                v0.hash(state);
1901            }
1902            crate::Pat::Paren(v0) => {
1903                state.write_u8(5u8);
1904                v0.hash(state);
1905            }
1906            crate::Pat::Path(v0) => {
1907                state.write_u8(6u8);
1908                v0.hash(state);
1909            }
1910            crate::Pat::Range(v0) => {
1911                state.write_u8(7u8);
1912                v0.hash(state);
1913            }
1914            crate::Pat::Reference(v0) => {
1915                state.write_u8(8u8);
1916                v0.hash(state);
1917            }
1918            crate::Pat::Rest(v0) => {
1919                state.write_u8(9u8);
1920                v0.hash(state);
1921            }
1922            crate::Pat::Slice(v0) => {
1923                state.write_u8(10u8);
1924                v0.hash(state);
1925            }
1926            crate::Pat::Struct(v0) => {
1927                state.write_u8(11u8);
1928                v0.hash(state);
1929            }
1930            crate::Pat::Tuple(v0) => {
1931                state.write_u8(12u8);
1932                v0.hash(state);
1933            }
1934            crate::Pat::TupleStruct(v0) => {
1935                state.write_u8(13u8);
1936                v0.hash(state);
1937            }
1938            crate::Pat::Type(v0) => {
1939                state.write_u8(14u8);
1940                v0.hash(state);
1941            }
1942            crate::Pat::Verbatim(v0) => {
1943                state.write_u8(15u8);
1944                TokenStreamHelper(v0).hash(state);
1945            }
1946            crate::Pat::Wild(v0) => {
1947                state.write_u8(16u8);
1948                v0.hash(state);
1949            }
1950        }
1951    }
1952}
1953#[cfg(feature = "full")]
1954#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1955impl Hash for crate::PatIdent {
1956    fn hash<H>(&self, state: &mut H)
1957    where
1958        H: Hasher,
1959    {
1960        self.attrs.hash(state);
1961        self.by_ref.hash(state);
1962        self.mutability.hash(state);
1963        self.ident.hash(state);
1964        self.subpat.hash(state);
1965    }
1966}
1967#[cfg(feature = "full")]
1968#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1969impl Hash for crate::PatOr {
1970    fn hash<H>(&self, state: &mut H)
1971    where
1972        H: Hasher,
1973    {
1974        self.attrs.hash(state);
1975        self.leading_vert.hash(state);
1976        self.cases.hash(state);
1977    }
1978}
1979#[cfg(feature = "full")]
1980#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1981impl Hash for crate::PatParen {
1982    fn hash<H>(&self, state: &mut H)
1983    where
1984        H: Hasher,
1985    {
1986        self.attrs.hash(state);
1987        self.pat.hash(state);
1988    }
1989}
1990#[cfg(feature = "full")]
1991#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
1992impl Hash for crate::PatReference {
1993    fn hash<H>(&self, state: &mut H)
1994    where
1995        H: Hasher,
1996    {
1997        self.attrs.hash(state);
1998        self.mutability.hash(state);
1999        self.pat.hash(state);
2000    }
2001}
2002#[cfg(feature = "full")]
2003#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2004impl Hash for crate::PatRest {
2005    fn hash<H>(&self, state: &mut H)
2006    where
2007        H: Hasher,
2008    {
2009        self.attrs.hash(state);
2010    }
2011}
2012#[cfg(feature = "full")]
2013#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2014impl Hash for crate::PatSlice {
2015    fn hash<H>(&self, state: &mut H)
2016    where
2017        H: Hasher,
2018    {
2019        self.attrs.hash(state);
2020        self.elems.hash(state);
2021    }
2022}
2023#[cfg(feature = "full")]
2024#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2025impl Hash for crate::PatStruct {
2026    fn hash<H>(&self, state: &mut H)
2027    where
2028        H: Hasher,
2029    {
2030        self.attrs.hash(state);
2031        self.qself.hash(state);
2032        self.path.hash(state);
2033        self.fields.hash(state);
2034        self.rest.hash(state);
2035    }
2036}
2037#[cfg(feature = "full")]
2038#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2039impl Hash for crate::PatTuple {
2040    fn hash<H>(&self, state: &mut H)
2041    where
2042        H: Hasher,
2043    {
2044        self.attrs.hash(state);
2045        self.elems.hash(state);
2046    }
2047}
2048#[cfg(feature = "full")]
2049#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2050impl Hash for crate::PatTupleStruct {
2051    fn hash<H>(&self, state: &mut H)
2052    where
2053        H: Hasher,
2054    {
2055        self.attrs.hash(state);
2056        self.qself.hash(state);
2057        self.path.hash(state);
2058        self.elems.hash(state);
2059    }
2060}
2061#[cfg(feature = "full")]
2062#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2063impl Hash for crate::PatType {
2064    fn hash<H>(&self, state: &mut H)
2065    where
2066        H: Hasher,
2067    {
2068        self.attrs.hash(state);
2069        self.pat.hash(state);
2070        self.ty.hash(state);
2071    }
2072}
2073#[cfg(feature = "full")]
2074#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2075impl Hash for crate::PatWild {
2076    fn hash<H>(&self, state: &mut H)
2077    where
2078        H: Hasher,
2079    {
2080        self.attrs.hash(state);
2081    }
2082}
2083#[cfg(any(feature = "derive", feature = "full"))]
2084#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2085impl Hash for crate::Path {
2086    fn hash<H>(&self, state: &mut H)
2087    where
2088        H: Hasher,
2089    {
2090        self.leading_colon.hash(state);
2091        self.segments.hash(state);
2092    }
2093}
2094#[cfg(any(feature = "derive", feature = "full"))]
2095#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2096impl Hash for crate::PathArguments {
2097    fn hash<H>(&self, state: &mut H)
2098    where
2099        H: Hasher,
2100    {
2101        match self {
2102            crate::PathArguments::None => {
2103                state.write_u8(0u8);
2104            }
2105            crate::PathArguments::AngleBracketed(v0) => {
2106                state.write_u8(1u8);
2107                v0.hash(state);
2108            }
2109            crate::PathArguments::Parenthesized(v0) => {
2110                state.write_u8(2u8);
2111                v0.hash(state);
2112            }
2113        }
2114    }
2115}
2116#[cfg(any(feature = "derive", feature = "full"))]
2117#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2118impl Hash for crate::PathSegment {
2119    fn hash<H>(&self, state: &mut H)
2120    where
2121        H: Hasher,
2122    {
2123        self.ident.hash(state);
2124        self.arguments.hash(state);
2125    }
2126}
2127#[cfg(feature = "full")]
2128#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2129impl Hash for crate::PointerMutability {
2130    fn hash<H>(&self, state: &mut H)
2131    where
2132        H: Hasher,
2133    {
2134        match self {
2135            crate::PointerMutability::Const(_) => {
2136                state.write_u8(0u8);
2137            }
2138            crate::PointerMutability::Mut(_) => {
2139                state.write_u8(1u8);
2140            }
2141        }
2142    }
2143}
2144#[cfg(feature = "full")]
2145#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2146impl Hash for crate::PreciseCapture {
2147    fn hash<H>(&self, state: &mut H)
2148    where
2149        H: Hasher,
2150    {
2151        self.params.hash(state);
2152    }
2153}
2154#[cfg(any(feature = "derive", feature = "full"))]
2155#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2156impl Hash for crate::PredicateLifetime {
2157    fn hash<H>(&self, state: &mut H)
2158    where
2159        H: Hasher,
2160    {
2161        self.lifetime.hash(state);
2162        self.bounds.hash(state);
2163    }
2164}
2165#[cfg(any(feature = "derive", feature = "full"))]
2166#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2167impl Hash for crate::PredicateType {
2168    fn hash<H>(&self, state: &mut H)
2169    where
2170        H: Hasher,
2171    {
2172        self.lifetimes.hash(state);
2173        self.bounded_ty.hash(state);
2174        self.bounds.hash(state);
2175    }
2176}
2177#[cfg(any(feature = "derive", feature = "full"))]
2178#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2179impl Hash for crate::QSelf {
2180    fn hash<H>(&self, state: &mut H)
2181    where
2182        H: Hasher,
2183    {
2184        self.ty.hash(state);
2185        self.position.hash(state);
2186        self.as_token.hash(state);
2187    }
2188}
2189#[cfg(feature = "full")]
2190#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2191impl Hash for crate::RangeLimits {
2192    fn hash<H>(&self, state: &mut H)
2193    where
2194        H: Hasher,
2195    {
2196        match self {
2197            crate::RangeLimits::HalfOpen(_) => {
2198                state.write_u8(0u8);
2199            }
2200            crate::RangeLimits::Closed(_) => {
2201                state.write_u8(1u8);
2202            }
2203        }
2204    }
2205}
2206#[cfg(feature = "full")]
2207#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2208impl Hash for crate::Receiver {
2209    fn hash<H>(&self, state: &mut H)
2210    where
2211        H: Hasher,
2212    {
2213        self.attrs.hash(state);
2214        self.reference.hash(state);
2215        self.mutability.hash(state);
2216        self.colon_token.hash(state);
2217        self.ty.hash(state);
2218    }
2219}
2220#[cfg(any(feature = "derive", feature = "full"))]
2221#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2222impl Hash for crate::ReturnType {
2223    fn hash<H>(&self, state: &mut H)
2224    where
2225        H: Hasher,
2226    {
2227        match self {
2228            crate::ReturnType::Default => {
2229                state.write_u8(0u8);
2230            }
2231            crate::ReturnType::Type(_, v1) => {
2232                state.write_u8(1u8);
2233                v1.hash(state);
2234            }
2235        }
2236    }
2237}
2238#[cfg(feature = "full")]
2239#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2240impl Hash for crate::Signature {
2241    fn hash<H>(&self, state: &mut H)
2242    where
2243        H: Hasher,
2244    {
2245        self.constness.hash(state);
2246        self.asyncness.hash(state);
2247        self.unsafety.hash(state);
2248        self.abi.hash(state);
2249        self.ident.hash(state);
2250        self.generics.hash(state);
2251        self.inputs.hash(state);
2252        self.variadic.hash(state);
2253        self.output.hash(state);
2254    }
2255}
2256#[cfg(feature = "full")]
2257#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2258impl Hash for crate::StaticMutability {
2259    fn hash<H>(&self, state: &mut H)
2260    where
2261        H: Hasher,
2262    {
2263        match self {
2264            crate::StaticMutability::Mut(_) => {
2265                state.write_u8(0u8);
2266            }
2267            crate::StaticMutability::None => {
2268                state.write_u8(1u8);
2269            }
2270        }
2271    }
2272}
2273#[cfg(feature = "full")]
2274#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2275impl Hash for crate::Stmt {
2276    fn hash<H>(&self, state: &mut H)
2277    where
2278        H: Hasher,
2279    {
2280        match self {
2281            crate::Stmt::Local(v0) => {
2282                state.write_u8(0u8);
2283                v0.hash(state);
2284            }
2285            crate::Stmt::Item(v0) => {
2286                state.write_u8(1u8);
2287                v0.hash(state);
2288            }
2289            crate::Stmt::Expr(v0, v1) => {
2290                state.write_u8(2u8);
2291                v0.hash(state);
2292                v1.hash(state);
2293            }
2294            crate::Stmt::Macro(v0) => {
2295                state.write_u8(3u8);
2296                v0.hash(state);
2297            }
2298        }
2299    }
2300}
2301#[cfg(feature = "full")]
2302#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2303impl Hash for crate::StmtMacro {
2304    fn hash<H>(&self, state: &mut H)
2305    where
2306        H: Hasher,
2307    {
2308        self.attrs.hash(state);
2309        self.mac.hash(state);
2310        self.semi_token.hash(state);
2311    }
2312}
2313#[cfg(any(feature = "derive", feature = "full"))]
2314#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2315impl Hash for crate::TraitBound {
2316    fn hash<H>(&self, state: &mut H)
2317    where
2318        H: Hasher,
2319    {
2320        self.paren_token.hash(state);
2321        self.modifier.hash(state);
2322        self.lifetimes.hash(state);
2323        self.path.hash(state);
2324    }
2325}
2326#[cfg(any(feature = "derive", feature = "full"))]
2327#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2328impl Hash for crate::TraitBoundModifier {
2329    fn hash<H>(&self, state: &mut H)
2330    where
2331        H: Hasher,
2332    {
2333        match self {
2334            crate::TraitBoundModifier::None => {
2335                state.write_u8(0u8);
2336            }
2337            crate::TraitBoundModifier::Maybe(_) => {
2338                state.write_u8(1u8);
2339            }
2340        }
2341    }
2342}
2343#[cfg(feature = "full")]
2344#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2345impl Hash for crate::TraitItem {
2346    fn hash<H>(&self, state: &mut H)
2347    where
2348        H: Hasher,
2349    {
2350        match self {
2351            crate::TraitItem::Const(v0) => {
2352                state.write_u8(0u8);
2353                v0.hash(state);
2354            }
2355            crate::TraitItem::Fn(v0) => {
2356                state.write_u8(1u8);
2357                v0.hash(state);
2358            }
2359            crate::TraitItem::Type(v0) => {
2360                state.write_u8(2u8);
2361                v0.hash(state);
2362            }
2363            crate::TraitItem::Macro(v0) => {
2364                state.write_u8(3u8);
2365                v0.hash(state);
2366            }
2367            crate::TraitItem::Verbatim(v0) => {
2368                state.write_u8(4u8);
2369                TokenStreamHelper(v0).hash(state);
2370            }
2371        }
2372    }
2373}
2374#[cfg(feature = "full")]
2375#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2376impl Hash for crate::TraitItemConst {
2377    fn hash<H>(&self, state: &mut H)
2378    where
2379        H: Hasher,
2380    {
2381        self.attrs.hash(state);
2382        self.ident.hash(state);
2383        self.generics.hash(state);
2384        self.ty.hash(state);
2385        self.default.hash(state);
2386    }
2387}
2388#[cfg(feature = "full")]
2389#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2390impl Hash for crate::TraitItemFn {
2391    fn hash<H>(&self, state: &mut H)
2392    where
2393        H: Hasher,
2394    {
2395        self.attrs.hash(state);
2396        self.sig.hash(state);
2397        self.default.hash(state);
2398        self.semi_token.hash(state);
2399    }
2400}
2401#[cfg(feature = "full")]
2402#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2403impl Hash for crate::TraitItemMacro {
2404    fn hash<H>(&self, state: &mut H)
2405    where
2406        H: Hasher,
2407    {
2408        self.attrs.hash(state);
2409        self.mac.hash(state);
2410        self.semi_token.hash(state);
2411    }
2412}
2413#[cfg(feature = "full")]
2414#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2415impl Hash for crate::TraitItemType {
2416    fn hash<H>(&self, state: &mut H)
2417    where
2418        H: Hasher,
2419    {
2420        self.attrs.hash(state);
2421        self.ident.hash(state);
2422        self.generics.hash(state);
2423        self.colon_token.hash(state);
2424        self.bounds.hash(state);
2425        self.default.hash(state);
2426    }
2427}
2428#[cfg(any(feature = "derive", feature = "full"))]
2429#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2430impl Hash for crate::Type {
2431    fn hash<H>(&self, state: &mut H)
2432    where
2433        H: Hasher,
2434    {
2435        match self {
2436            crate::Type::Array(v0) => {
2437                state.write_u8(0u8);
2438                v0.hash(state);
2439            }
2440            crate::Type::BareFn(v0) => {
2441                state.write_u8(1u8);
2442                v0.hash(state);
2443            }
2444            crate::Type::Group(v0) => {
2445                state.write_u8(2u8);
2446                v0.hash(state);
2447            }
2448            crate::Type::ImplTrait(v0) => {
2449                state.write_u8(3u8);
2450                v0.hash(state);
2451            }
2452            crate::Type::Infer(v0) => {
2453                state.write_u8(4u8);
2454                v0.hash(state);
2455            }
2456            crate::Type::Macro(v0) => {
2457                state.write_u8(5u8);
2458                v0.hash(state);
2459            }
2460            crate::Type::Never(v0) => {
2461                state.write_u8(6u8);
2462                v0.hash(state);
2463            }
2464            crate::Type::Paren(v0) => {
2465                state.write_u8(7u8);
2466                v0.hash(state);
2467            }
2468            crate::Type::Path(v0) => {
2469                state.write_u8(8u8);
2470                v0.hash(state);
2471            }
2472            crate::Type::Ptr(v0) => {
2473                state.write_u8(9u8);
2474                v0.hash(state);
2475            }
2476            crate::Type::Reference(v0) => {
2477                state.write_u8(10u8);
2478                v0.hash(state);
2479            }
2480            crate::Type::Slice(v0) => {
2481                state.write_u8(11u8);
2482                v0.hash(state);
2483            }
2484            crate::Type::TraitObject(v0) => {
2485                state.write_u8(12u8);
2486                v0.hash(state);
2487            }
2488            crate::Type::Tuple(v0) => {
2489                state.write_u8(13u8);
2490                v0.hash(state);
2491            }
2492            crate::Type::Verbatim(v0) => {
2493                state.write_u8(14u8);
2494                TokenStreamHelper(v0).hash(state);
2495            }
2496        }
2497    }
2498}
2499#[cfg(any(feature = "derive", feature = "full"))]
2500#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2501impl Hash for crate::TypeArray {
2502    fn hash<H>(&self, state: &mut H)
2503    where
2504        H: Hasher,
2505    {
2506        self.elem.hash(state);
2507        self.len.hash(state);
2508    }
2509}
2510#[cfg(any(feature = "derive", feature = "full"))]
2511#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2512impl Hash for crate::TypeBareFn {
2513    fn hash<H>(&self, state: &mut H)
2514    where
2515        H: Hasher,
2516    {
2517        self.lifetimes.hash(state);
2518        self.unsafety.hash(state);
2519        self.abi.hash(state);
2520        self.inputs.hash(state);
2521        self.variadic.hash(state);
2522        self.output.hash(state);
2523    }
2524}
2525#[cfg(any(feature = "derive", feature = "full"))]
2526#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2527impl Hash for crate::TypeGroup {
2528    fn hash<H>(&self, state: &mut H)
2529    where
2530        H: Hasher,
2531    {
2532        self.elem.hash(state);
2533    }
2534}
2535#[cfg(any(feature = "derive", feature = "full"))]
2536#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2537impl Hash for crate::TypeImplTrait {
2538    fn hash<H>(&self, state: &mut H)
2539    where
2540        H: Hasher,
2541    {
2542        self.bounds.hash(state);
2543    }
2544}
2545#[cfg(any(feature = "derive", feature = "full"))]
2546#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2547impl Hash for crate::TypeInfer {
2548    fn hash<H>(&self, _state: &mut H)
2549    where
2550        H: Hasher,
2551    {}
2552}
2553#[cfg(any(feature = "derive", feature = "full"))]
2554#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2555impl Hash for crate::TypeMacro {
2556    fn hash<H>(&self, state: &mut H)
2557    where
2558        H: Hasher,
2559    {
2560        self.mac.hash(state);
2561    }
2562}
2563#[cfg(any(feature = "derive", feature = "full"))]
2564#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2565impl Hash for crate::TypeNever {
2566    fn hash<H>(&self, _state: &mut H)
2567    where
2568        H: Hasher,
2569    {}
2570}
2571#[cfg(any(feature = "derive", feature = "full"))]
2572#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2573impl Hash for crate::TypeParam {
2574    fn hash<H>(&self, state: &mut H)
2575    where
2576        H: Hasher,
2577    {
2578        self.attrs.hash(state);
2579        self.ident.hash(state);
2580        self.colon_token.hash(state);
2581        self.bounds.hash(state);
2582        self.eq_token.hash(state);
2583        self.default.hash(state);
2584    }
2585}
2586#[cfg(any(feature = "derive", feature = "full"))]
2587#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2588impl Hash for crate::TypeParamBound {
2589    fn hash<H>(&self, state: &mut H)
2590    where
2591        H: Hasher,
2592    {
2593        match self {
2594            crate::TypeParamBound::Trait(v0) => {
2595                state.write_u8(0u8);
2596                v0.hash(state);
2597            }
2598            crate::TypeParamBound::Lifetime(v0) => {
2599                state.write_u8(1u8);
2600                v0.hash(state);
2601            }
2602            #[cfg(feature = "full")]
2603            crate::TypeParamBound::PreciseCapture(v0) => {
2604                state.write_u8(2u8);
2605                v0.hash(state);
2606            }
2607            crate::TypeParamBound::Verbatim(v0) => {
2608                state.write_u8(3u8);
2609                TokenStreamHelper(v0).hash(state);
2610            }
2611            #[cfg(not(feature = "full"))]
2612            _ => unreachable!(),
2613        }
2614    }
2615}
2616#[cfg(any(feature = "derive", feature = "full"))]
2617#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2618impl Hash for crate::TypeParen {
2619    fn hash<H>(&self, state: &mut H)
2620    where
2621        H: Hasher,
2622    {
2623        self.elem.hash(state);
2624    }
2625}
2626#[cfg(any(feature = "derive", feature = "full"))]
2627#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2628impl Hash for crate::TypePath {
2629    fn hash<H>(&self, state: &mut H)
2630    where
2631        H: Hasher,
2632    {
2633        self.qself.hash(state);
2634        self.path.hash(state);
2635    }
2636}
2637#[cfg(any(feature = "derive", feature = "full"))]
2638#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2639impl Hash for crate::TypePtr {
2640    fn hash<H>(&self, state: &mut H)
2641    where
2642        H: Hasher,
2643    {
2644        self.const_token.hash(state);
2645        self.mutability.hash(state);
2646        self.elem.hash(state);
2647    }
2648}
2649#[cfg(any(feature = "derive", feature = "full"))]
2650#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2651impl Hash for crate::TypeReference {
2652    fn hash<H>(&self, state: &mut H)
2653    where
2654        H: Hasher,
2655    {
2656        self.lifetime.hash(state);
2657        self.mutability.hash(state);
2658        self.elem.hash(state);
2659    }
2660}
2661#[cfg(any(feature = "derive", feature = "full"))]
2662#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2663impl Hash for crate::TypeSlice {
2664    fn hash<H>(&self, state: &mut H)
2665    where
2666        H: Hasher,
2667    {
2668        self.elem.hash(state);
2669    }
2670}
2671#[cfg(any(feature = "derive", feature = "full"))]
2672#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2673impl Hash for crate::TypeTraitObject {
2674    fn hash<H>(&self, state: &mut H)
2675    where
2676        H: Hasher,
2677    {
2678        self.dyn_token.hash(state);
2679        self.bounds.hash(state);
2680    }
2681}
2682#[cfg(any(feature = "derive", feature = "full"))]
2683#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2684impl Hash for crate::TypeTuple {
2685    fn hash<H>(&self, state: &mut H)
2686    where
2687        H: Hasher,
2688    {
2689        self.elems.hash(state);
2690    }
2691}
2692#[cfg(any(feature = "derive", feature = "full"))]
2693#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2694impl Hash for crate::UnOp {
2695    fn hash<H>(&self, state: &mut H)
2696    where
2697        H: Hasher,
2698    {
2699        match self {
2700            crate::UnOp::Deref(_) => {
2701                state.write_u8(0u8);
2702            }
2703            crate::UnOp::Not(_) => {
2704                state.write_u8(1u8);
2705            }
2706            crate::UnOp::Neg(_) => {
2707                state.write_u8(2u8);
2708            }
2709        }
2710    }
2711}
2712#[cfg(feature = "full")]
2713#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2714impl Hash for crate::UseGlob {
2715    fn hash<H>(&self, _state: &mut H)
2716    where
2717        H: Hasher,
2718    {}
2719}
2720#[cfg(feature = "full")]
2721#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2722impl Hash for crate::UseGroup {
2723    fn hash<H>(&self, state: &mut H)
2724    where
2725        H: Hasher,
2726    {
2727        self.items.hash(state);
2728    }
2729}
2730#[cfg(feature = "full")]
2731#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2732impl Hash for crate::UseName {
2733    fn hash<H>(&self, state: &mut H)
2734    where
2735        H: Hasher,
2736    {
2737        self.ident.hash(state);
2738    }
2739}
2740#[cfg(feature = "full")]
2741#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2742impl Hash for crate::UsePath {
2743    fn hash<H>(&self, state: &mut H)
2744    where
2745        H: Hasher,
2746    {
2747        self.ident.hash(state);
2748        self.tree.hash(state);
2749    }
2750}
2751#[cfg(feature = "full")]
2752#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2753impl Hash for crate::UseRename {
2754    fn hash<H>(&self, state: &mut H)
2755    where
2756        H: Hasher,
2757    {
2758        self.ident.hash(state);
2759        self.rename.hash(state);
2760    }
2761}
2762#[cfg(feature = "full")]
2763#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2764impl Hash for crate::UseTree {
2765    fn hash<H>(&self, state: &mut H)
2766    where
2767        H: Hasher,
2768    {
2769        match self {
2770            crate::UseTree::Path(v0) => {
2771                state.write_u8(0u8);
2772                v0.hash(state);
2773            }
2774            crate::UseTree::Name(v0) => {
2775                state.write_u8(1u8);
2776                v0.hash(state);
2777            }
2778            crate::UseTree::Rename(v0) => {
2779                state.write_u8(2u8);
2780                v0.hash(state);
2781            }
2782            crate::UseTree::Glob(v0) => {
2783                state.write_u8(3u8);
2784                v0.hash(state);
2785            }
2786            crate::UseTree::Group(v0) => {
2787                state.write_u8(4u8);
2788                v0.hash(state);
2789            }
2790        }
2791    }
2792}
2793#[cfg(feature = "full")]
2794#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2795impl Hash for crate::Variadic {
2796    fn hash<H>(&self, state: &mut H)
2797    where
2798        H: Hasher,
2799    {
2800        self.attrs.hash(state);
2801        self.pat.hash(state);
2802        self.comma.hash(state);
2803    }
2804}
2805#[cfg(any(feature = "derive", feature = "full"))]
2806#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2807impl Hash for crate::Variant {
2808    fn hash<H>(&self, state: &mut H)
2809    where
2810        H: Hasher,
2811    {
2812        self.attrs.hash(state);
2813        self.ident.hash(state);
2814        self.fields.hash(state);
2815        self.discriminant.hash(state);
2816    }
2817}
2818#[cfg(any(feature = "derive", feature = "full"))]
2819#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2820impl Hash for crate::VisRestricted {
2821    fn hash<H>(&self, state: &mut H)
2822    where
2823        H: Hasher,
2824    {
2825        self.in_token.hash(state);
2826        self.path.hash(state);
2827    }
2828}
2829#[cfg(any(feature = "derive", feature = "full"))]
2830#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2831impl Hash for crate::Visibility {
2832    fn hash<H>(&self, state: &mut H)
2833    where
2834        H: Hasher,
2835    {
2836        match self {
2837            crate::Visibility::Public(_) => {
2838                state.write_u8(0u8);
2839            }
2840            crate::Visibility::Restricted(v0) => {
2841                state.write_u8(1u8);
2842                v0.hash(state);
2843            }
2844            crate::Visibility::Inherited => {
2845                state.write_u8(2u8);
2846            }
2847        }
2848    }
2849}
2850#[cfg(any(feature = "derive", feature = "full"))]
2851#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2852impl Hash for crate::WhereClause {
2853    fn hash<H>(&self, state: &mut H)
2854    where
2855        H: Hasher,
2856    {
2857        self.predicates.hash(state);
2858    }
2859}
2860#[cfg(any(feature = "derive", feature = "full"))]
2861#[cfg_attr(docsrs, doc(cfg(feature = "extra-traits")))]
2862impl Hash for crate::WherePredicate {
2863    fn hash<H>(&self, state: &mut H)
2864    where
2865        H: Hasher,
2866    {
2867        match self {
2868            crate::WherePredicate::Lifetime(v0) => {
2869                state.write_u8(0u8);
2870                v0.hash(state);
2871            }
2872            crate::WherePredicate::Type(v0) => {
2873                state.write_u8(1u8);
2874                v0.hash(state);
2875            }
2876        }
2877    }
2878}