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