@@ -8,6 +8,9 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer, de};
8
8
9
9
use crate :: clean;
10
10
11
+ macro_rules! item_type {
12
+ ( $( $variant: ident = $number: literal, ) +) => {
13
+
11
14
/// Item type. Corresponds to `clean::ItemEnum` variants.
12
15
///
13
16
/// The search index uses item types encoded as smaller numbers which equal to
@@ -29,35 +32,7 @@ use crate::clean;
29
32
#[ derive( Copy , PartialEq , Eq , Hash , Clone , Debug , PartialOrd , Ord ) ]
30
33
#[ repr( u8 ) ]
31
34
pub ( crate ) enum ItemType {
32
- Keyword = 0 ,
33
- Primitive = 1 ,
34
- Module = 2 ,
35
- ExternCrate = 3 ,
36
- Import = 4 ,
37
- Struct = 5 ,
38
- Enum = 6 ,
39
- Function = 7 ,
40
- TypeAlias = 8 ,
41
- Static = 9 ,
42
- Trait = 10 ,
43
- Impl = 11 ,
44
- TyMethod = 12 ,
45
- Method = 13 ,
46
- StructField = 14 ,
47
- Variant = 15 ,
48
- Macro = 16 ,
49
- AssocType = 17 ,
50
- Constant = 18 ,
51
- AssocConst = 19 ,
52
- Union = 20 ,
53
- ForeignType = 21 ,
54
- // OpaqueTy used to be here, but it was removed in #127276
55
- ProcAttribute = 23 ,
56
- ProcDerive = 24 ,
57
- TraitAlias = 25 ,
58
- // This number is reserved for use in JavaScript
59
- // Generic = 26,
60
- Attribute = 27 ,
35
+ $( $variant = $number, ) +
61
36
}
62
37
63
38
impl Serialize for ItemType {
@@ -82,32 +57,7 @@ impl<'de> Deserialize<'de> for ItemType {
82
57
}
83
58
fn visit_u64<E : de:: Error >( self , v: u64 ) -> Result <ItemType , E > {
84
59
Ok ( match v {
85
- 0 => ItemType :: Keyword ,
86
- 1 => ItemType :: Primitive ,
87
- 2 => ItemType :: Module ,
88
- 3 => ItemType :: ExternCrate ,
89
- 4 => ItemType :: Import ,
90
- 5 => ItemType :: Struct ,
91
- 6 => ItemType :: Enum ,
92
- 7 => ItemType :: Function ,
93
- 8 => ItemType :: TypeAlias ,
94
- 9 => ItemType :: Static ,
95
- 10 => ItemType :: Trait ,
96
- 11 => ItemType :: Impl ,
97
- 12 => ItemType :: TyMethod ,
98
- 13 => ItemType :: Method ,
99
- 14 => ItemType :: StructField ,
100
- 15 => ItemType :: Variant ,
101
- 16 => ItemType :: Macro ,
102
- 17 => ItemType :: AssocType ,
103
- 18 => ItemType :: Constant ,
104
- 19 => ItemType :: AssocConst ,
105
- 20 => ItemType :: Union ,
106
- 21 => ItemType :: ForeignType ,
107
- 23 => ItemType :: ProcAttribute ,
108
- 24 => ItemType :: ProcDerive ,
109
- 25 => ItemType :: TraitAlias ,
110
- 27 => ItemType :: Attribute ,
60
+ $( $number => ItemType :: $variant, ) +
111
61
_ => return Err ( E :: missing_field( "unknown number for `ItemType` enum" ) ) ,
112
62
} )
113
63
}
@@ -116,6 +66,41 @@ impl<'de> Deserialize<'de> for ItemType {
116
66
}
117
67
}
118
68
69
+ }
70
+ }
71
+
72
+ item_type ! {
73
+ Keyword = 0 ,
74
+ Primitive = 1 ,
75
+ Module = 2 ,
76
+ ExternCrate = 3 ,
77
+ Import = 4 ,
78
+ Struct = 5 ,
79
+ Enum = 6 ,
80
+ Function = 7 ,
81
+ TypeAlias = 8 ,
82
+ Static = 9 ,
83
+ Trait = 10 ,
84
+ Impl = 11 ,
85
+ TyMethod = 12 ,
86
+ Method = 13 ,
87
+ StructField = 14 ,
88
+ Variant = 15 ,
89
+ Macro = 16 ,
90
+ AssocType = 17 ,
91
+ Constant = 18 ,
92
+ AssocConst = 19 ,
93
+ Union = 20 ,
94
+ ForeignType = 21 ,
95
+ // OpaqueTy used to be here, but it was removed in #127276
96
+ ProcAttribute = 23 ,
97
+ ProcDerive = 24 ,
98
+ TraitAlias = 25 ,
99
+ // This number is reserved for use in JavaScript
100
+ // Generic = 26,
101
+ Attribute = 27 ,
102
+ }
103
+
119
104
impl < ' a > From < & ' a clean:: Item > for ItemType {
120
105
fn from ( item : & ' a clean:: Item ) -> ItemType {
121
106
let kind = match & item. kind {
0 commit comments