@latticexyz/schema-type 1.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,237 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ using { getStaticByteLength } for SchemaType global;
5
+
6
+ // WARNING: All enum changes MUST be mirrored for the other languages!
7
+ // WARNING: SchemaType methods use hardcoded enum indexes, review them after any changes to the enum
8
+ // TODO add and implement BYTES_ARRAY, STRING_ARRAY if they are needed (see https://github.com/latticexyz/mud/issues/447)
9
+ enum SchemaType {
10
+ UINT8,
11
+ UINT16,
12
+ UINT24,
13
+ UINT32,
14
+ UINT40,
15
+ UINT48,
16
+ UINT56,
17
+ UINT64,
18
+ UINT72,
19
+ UINT80,
20
+ UINT88,
21
+ UINT96,
22
+ UINT104,
23
+ UINT112,
24
+ UINT120,
25
+ UINT128,
26
+ UINT136,
27
+ UINT144,
28
+ UINT152,
29
+ UINT160,
30
+ UINT168,
31
+ UINT176,
32
+ UINT184,
33
+ UINT192,
34
+ UINT200,
35
+ UINT208,
36
+ UINT216,
37
+ UINT224,
38
+ UINT232,
39
+ UINT240,
40
+ UINT248,
41
+ UINT256,
42
+ INT8,
43
+ INT16,
44
+ INT24,
45
+ INT32,
46
+ INT40,
47
+ INT48,
48
+ INT56,
49
+ INT64,
50
+ INT72,
51
+ INT80,
52
+ INT88,
53
+ INT96,
54
+ INT104,
55
+ INT112,
56
+ INT120,
57
+ INT128,
58
+ INT136,
59
+ INT144,
60
+ INT152,
61
+ INT160,
62
+ INT168,
63
+ INT176,
64
+ INT184,
65
+ INT192,
66
+ INT200,
67
+ INT208,
68
+ INT216,
69
+ INT224,
70
+ INT232,
71
+ INT240,
72
+ INT248,
73
+ INT256,
74
+ BYTES1,
75
+ BYTES2,
76
+ BYTES3,
77
+ BYTES4,
78
+ BYTES5,
79
+ BYTES6,
80
+ BYTES7,
81
+ BYTES8,
82
+ BYTES9,
83
+ BYTES10,
84
+ BYTES11,
85
+ BYTES12,
86
+ BYTES13,
87
+ BYTES14,
88
+ BYTES15,
89
+ BYTES16,
90
+ BYTES17,
91
+ BYTES18,
92
+ BYTES19,
93
+ BYTES20,
94
+ BYTES21,
95
+ BYTES22,
96
+ BYTES23,
97
+ BYTES24,
98
+ BYTES25,
99
+ BYTES26,
100
+ BYTES27,
101
+ BYTES28,
102
+ BYTES29,
103
+ BYTES30,
104
+ BYTES31,
105
+ BYTES32,
106
+ BOOL,
107
+ ADDRESS,
108
+ UINT8_ARRAY,
109
+ UINT16_ARRAY,
110
+ UINT24_ARRAY,
111
+ UINT32_ARRAY,
112
+ UINT40_ARRAY,
113
+ UINT48_ARRAY,
114
+ UINT56_ARRAY,
115
+ UINT64_ARRAY,
116
+ UINT72_ARRAY,
117
+ UINT80_ARRAY,
118
+ UINT88_ARRAY,
119
+ UINT96_ARRAY,
120
+ UINT104_ARRAY,
121
+ UINT112_ARRAY,
122
+ UINT120_ARRAY,
123
+ UINT128_ARRAY,
124
+ UINT136_ARRAY,
125
+ UINT144_ARRAY,
126
+ UINT152_ARRAY,
127
+ UINT160_ARRAY,
128
+ UINT168_ARRAY,
129
+ UINT176_ARRAY,
130
+ UINT184_ARRAY,
131
+ UINT192_ARRAY,
132
+ UINT200_ARRAY,
133
+ UINT208_ARRAY,
134
+ UINT216_ARRAY,
135
+ UINT224_ARRAY,
136
+ UINT232_ARRAY,
137
+ UINT240_ARRAY,
138
+ UINT248_ARRAY,
139
+ UINT256_ARRAY,
140
+ INT8_ARRAY,
141
+ INT16_ARRAY,
142
+ INT24_ARRAY,
143
+ INT32_ARRAY,
144
+ INT40_ARRAY,
145
+ INT48_ARRAY,
146
+ INT56_ARRAY,
147
+ INT64_ARRAY,
148
+ INT72_ARRAY,
149
+ INT80_ARRAY,
150
+ INT88_ARRAY,
151
+ INT96_ARRAY,
152
+ INT104_ARRAY,
153
+ INT112_ARRAY,
154
+ INT120_ARRAY,
155
+ INT128_ARRAY,
156
+ INT136_ARRAY,
157
+ INT144_ARRAY,
158
+ INT152_ARRAY,
159
+ INT160_ARRAY,
160
+ INT168_ARRAY,
161
+ INT176_ARRAY,
162
+ INT184_ARRAY,
163
+ INT192_ARRAY,
164
+ INT200_ARRAY,
165
+ INT208_ARRAY,
166
+ INT216_ARRAY,
167
+ INT224_ARRAY,
168
+ INT232_ARRAY,
169
+ INT240_ARRAY,
170
+ INT248_ARRAY,
171
+ INT256_ARRAY,
172
+ BYTES1_ARRAY,
173
+ BYTES2_ARRAY,
174
+ BYTES3_ARRAY,
175
+ BYTES4_ARRAY,
176
+ BYTES5_ARRAY,
177
+ BYTES6_ARRAY,
178
+ BYTES7_ARRAY,
179
+ BYTES8_ARRAY,
180
+ BYTES9_ARRAY,
181
+ BYTES10_ARRAY,
182
+ BYTES11_ARRAY,
183
+ BYTES12_ARRAY,
184
+ BYTES13_ARRAY,
185
+ BYTES14_ARRAY,
186
+ BYTES15_ARRAY,
187
+ BYTES16_ARRAY,
188
+ BYTES17_ARRAY,
189
+ BYTES18_ARRAY,
190
+ BYTES19_ARRAY,
191
+ BYTES20_ARRAY,
192
+ BYTES21_ARRAY,
193
+ BYTES22_ARRAY,
194
+ BYTES23_ARRAY,
195
+ BYTES24_ARRAY,
196
+ BYTES25_ARRAY,
197
+ BYTES26_ARRAY,
198
+ BYTES27_ARRAY,
199
+ BYTES28_ARRAY,
200
+ BYTES29_ARRAY,
201
+ BYTES30_ARRAY,
202
+ BYTES31_ARRAY,
203
+ BYTES32_ARRAY,
204
+ BOOL_ARRAY,
205
+ ADDRESS_ARRAY,
206
+ BYTES,
207
+ STRING
208
+ }
209
+
210
+ /**
211
+ * Get the length of the data for the given schema type
212
+ * (Because Solidity doesn't support constant arrays, we need to use a function)
213
+ */
214
+ function getStaticByteLength(SchemaType schemaType) pure returns (uint256) {
215
+ uint256 index = uint8(schemaType);
216
+
217
+ if (index < 32) {
218
+ // uint8-256
219
+ return index + 1;
220
+ } else if (index < 64) {
221
+ // int8-256, offset by 32
222
+ return index + 1 - 32;
223
+ } else if (index < 96) {
224
+ // bytes1-32, offset by 64
225
+ return index + 1 - 64;
226
+ }
227
+
228
+ // Other static types
229
+ if (schemaType == SchemaType.BOOL) {
230
+ return 1;
231
+ } else if (schemaType == SchemaType.ADDRESS) {
232
+ return 20;
233
+ }
234
+
235
+ // Return 0 for all dynamic types
236
+ return 0;
237
+ }