1use crate::entity::entity_impl;
3use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
4#[cfg(feature = "enable-serde")]
5use serde::{Deserialize, Serialize};
6
7#[derive(
24 Copy,
25 Clone,
26 PartialEq,
27 Eq,
28 Hash,
29 PartialOrd,
30 Ord,
31 Debug,
32 RkyvSerialize,
33 RkyvDeserialize,
34 Archive,
35)]
36#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
37#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
38#[rkyv(derive(Debug, Hash, PartialEq, Eq), compare(PartialOrd, PartialEq))]
39pub struct LocalFunctionIndex(u32);
40entity_impl!(LocalFunctionIndex);
41
42#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)]
44#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
45#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
46pub struct LocalTableIndex(u32);
47entity_impl!(LocalTableIndex);
48
49#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)]
51#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
52#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
53pub struct LocalMemoryIndex(u32);
54entity_impl!(LocalMemoryIndex);
55
56#[derive(
58 Copy,
59 Clone,
60 PartialEq,
61 Eq,
62 Hash,
63 PartialOrd,
64 Ord,
65 Debug,
66 RkyvSerialize,
67 RkyvDeserialize,
68 Archive,
69)]
70#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
71#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
72#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
73pub struct LocalTagIndex(u32);
74entity_impl!(LocalTagIndex);
75
76#[derive(
78 Copy,
79 Clone,
80 PartialEq,
81 Eq,
82 Hash,
83 PartialOrd,
84 Ord,
85 Debug,
86 RkyvSerialize,
87 RkyvDeserialize,
88 Archive,
89)]
90#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
91#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
92#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
93pub struct LocalGlobalIndex(u32);
94entity_impl!(LocalGlobalIndex);
95
96#[derive(
98 Copy,
99 Clone,
100 PartialEq,
101 Eq,
102 Hash,
103 PartialOrd,
104 Ord,
105 Debug,
106 RkyvSerialize,
107 RkyvDeserialize,
108 Archive,
109)]
110#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
111#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
112#[rkyv(
113 derive(Debug, PartialOrd, Ord, PartialEq, Eq),
114 compare(PartialOrd, PartialEq)
115)]
116pub struct FunctionIndex(u32);
117entity_impl!(FunctionIndex);
118
119#[derive(
121 Copy,
122 Clone,
123 PartialEq,
124 Eq,
125 Hash,
126 PartialOrd,
127 Ord,
128 Debug,
129 RkyvSerialize,
130 RkyvDeserialize,
131 Archive,
132)]
133#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
134#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
135#[rkyv(
136 derive(Debug, PartialOrd, Ord, PartialEq, Eq),
137 compare(PartialOrd, PartialEq)
138)]
139pub struct TableIndex(u32);
140entity_impl!(TableIndex);
141
142#[derive(
144 Copy,
145 Clone,
146 PartialEq,
147 Eq,
148 Hash,
149 PartialOrd,
150 Ord,
151 Debug,
152 RkyvSerialize,
153 RkyvDeserialize,
154 Archive,
155)]
156#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
157#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
158#[rkyv(
159 derive(Debug, PartialOrd, Ord, PartialEq, Eq),
160 compare(PartialOrd, PartialEq)
161)]
162pub struct TagIndex(u32);
163entity_impl!(TagIndex);
164
165#[derive(
167 Copy,
168 Clone,
169 PartialEq,
170 Eq,
171 Hash,
172 PartialOrd,
173 Ord,
174 Debug,
175 RkyvSerialize,
176 RkyvDeserialize,
177 Archive,
178)]
179#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
180#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
181#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
182pub struct GlobalIndex(u32);
183entity_impl!(GlobalIndex);
184
185#[derive(
187 Copy,
188 Clone,
189 PartialEq,
190 Eq,
191 Hash,
192 PartialOrd,
193 Ord,
194 Debug,
195 RkyvSerialize,
196 RkyvDeserialize,
197 Archive,
198)]
199#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
200#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
201#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
202pub struct MemoryIndex(pub(crate) u32);
203entity_impl!(MemoryIndex);
204
205#[derive(
207 Copy,
208 Clone,
209 PartialEq,
210 Eq,
211 Hash,
212 PartialOrd,
213 Ord,
214 Debug,
215 RkyvSerialize,
216 RkyvDeserialize,
217 Archive,
218)]
219#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
220#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
221#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
222pub struct SignatureIndex(u32);
223entity_impl!(SignatureIndex);
224
225#[derive(
227 Copy,
228 Clone,
229 PartialEq,
230 Eq,
231 Hash,
232 PartialOrd,
233 Ord,
234 Debug,
235 RkyvSerialize,
236 RkyvDeserialize,
237 Archive,
238)]
239#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
240#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
241#[rkyv(
242 derive(Debug, PartialOrd, Ord, PartialEq, Eq),
243 compare(PartialOrd, PartialEq)
244)]
245pub struct DataIndex(u32);
246entity_impl!(DataIndex);
247
248#[derive(
250 Copy,
251 Clone,
252 PartialEq,
253 Eq,
254 Hash,
255 PartialOrd,
256 Ord,
257 Debug,
258 RkyvSerialize,
259 RkyvDeserialize,
260 Archive,
261)]
262#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
263#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
264#[rkyv(
265 derive(Debug, PartialOrd, Ord, PartialEq, Eq),
266 compare(PartialOrd, PartialEq)
267)]
268pub struct ElemIndex(u32);
269entity_impl!(ElemIndex);
270
271#[derive(
273 Copy,
274 Clone,
275 PartialEq,
276 Eq,
277 Hash,
278 PartialOrd,
279 Ord,
280 Debug,
281 RkyvSerialize,
282 RkyvDeserialize,
283 Archive,
284)]
285#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
286#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
287#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
288pub struct CustomSectionIndex(u32);
289entity_impl!(CustomSectionIndex);
290
291#[derive(
293 Copy,
294 Clone,
295 Debug,
296 Hash,
297 PartialEq,
298 Eq,
299 PartialOrd,
300 Ord,
301 RkyvSerialize,
302 RkyvDeserialize,
303 Archive,
304)]
305#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
306#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
307#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
308#[repr(u8)]
309pub enum ExportIndex {
310 Function(FunctionIndex),
312 Table(TableIndex),
314 Memory(MemoryIndex),
316 Tag(TagIndex),
318 Global(GlobalIndex),
320}
321
322#[derive(
324 Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, RkyvSerialize, RkyvDeserialize, Archive,
325)]
326#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
327#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
328#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
329#[repr(u8)]
330pub enum ImportIndex {
331 Function(FunctionIndex),
333 Table(TableIndex),
335 Memory(MemoryIndex),
337 Tag(TagIndex),
339 Global(GlobalIndex),
341}
342
343#[derive(
345 Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, RkyvSerialize, RkyvDeserialize, Archive,
346)]
347#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
348#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
349#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
350pub struct Tag {
351 pub ty: u32,
353}