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, Hash),
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(derive(Debug), compare(PartialOrd, PartialEq))]
242pub struct SignatureHash(pub u32);
243
244impl SignatureHash {
245 pub fn new(value: u32) -> Self {
247 Self(value)
248 }
249
250 pub fn as_u32(self) -> u32 {
252 self.0
253 }
254}
255
256#[derive(
258 Copy,
259 Clone,
260 PartialEq,
261 Eq,
262 Hash,
263 PartialOrd,
264 Ord,
265 Debug,
266 RkyvSerialize,
267 RkyvDeserialize,
268 Archive,
269)]
270#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
271#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
272#[rkyv(
273 derive(Debug, PartialOrd, Ord, PartialEq, Eq),
274 compare(PartialOrd, PartialEq)
275)]
276pub struct DataIndex(u32);
277entity_impl!(DataIndex);
278
279#[derive(
281 Copy,
282 Clone,
283 PartialEq,
284 Eq,
285 Hash,
286 PartialOrd,
287 Ord,
288 Debug,
289 RkyvSerialize,
290 RkyvDeserialize,
291 Archive,
292)]
293#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
294#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
295#[rkyv(
296 derive(Debug, PartialOrd, Ord, PartialEq, Eq),
297 compare(PartialOrd, PartialEq)
298)]
299pub struct ElemIndex(u32);
300entity_impl!(ElemIndex);
301
302#[derive(
304 Copy,
305 Clone,
306 PartialEq,
307 Eq,
308 Hash,
309 PartialOrd,
310 Ord,
311 Debug,
312 RkyvSerialize,
313 RkyvDeserialize,
314 Archive,
315)]
316#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
317#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
318#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
319pub struct CustomSectionIndex(u32);
320entity_impl!(CustomSectionIndex);
321
322#[derive(
324 Copy,
325 Clone,
326 Debug,
327 Hash,
328 PartialEq,
329 Eq,
330 PartialOrd,
331 Ord,
332 RkyvSerialize,
333 RkyvDeserialize,
334 Archive,
335)]
336#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
337#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
338#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
339#[repr(u8)]
340pub enum ExportIndex {
341 Function(FunctionIndex),
343 Table(TableIndex),
345 Memory(MemoryIndex),
347 Tag(TagIndex),
349 Global(GlobalIndex),
351}
352
353#[derive(
355 Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, RkyvSerialize, RkyvDeserialize, Archive,
356)]
357#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
358#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
359#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
360#[repr(u8)]
361pub enum ImportIndex {
362 Function(FunctionIndex),
364 Table(TableIndex),
366 Memory(MemoryIndex),
368 Tag(TagIndex),
370 Global(GlobalIndex),
372}
373
374#[derive(
376 Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, RkyvSerialize, RkyvDeserialize, Archive,
377)]
378#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
379#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
380#[rkyv(derive(Debug), compare(PartialOrd, PartialEq))]
381pub struct Tag {
382 pub ty: u32,
384}