1use arrow_buffer::i256;
28use arrow_schema::ArrowError;
29
30pub use arrow_schema::{
31 DECIMAL128_MAX_PRECISION, DECIMAL128_MAX_SCALE, DECIMAL256_MAX_PRECISION, DECIMAL256_MAX_SCALE,
32 DECIMAL32_DEFAULT_SCALE, DECIMAL32_MAX_PRECISION, DECIMAL32_MAX_SCALE, DECIMAL64_DEFAULT_SCALE,
33 DECIMAL64_MAX_PRECISION, DECIMAL64_MAX_SCALE, DECIMAL_DEFAULT_SCALE,
34};
35
36pub const MAX_DECIMAL256_FOR_EACH_PRECISION: [i256; 77] = [
57 i256::from_i128(0_i128), i256::from_le_bytes([
59 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
60 0, 0,
61 ]),
62 i256::from_le_bytes([
63 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
64 0, 0,
65 ]),
66 i256::from_le_bytes([
67 231, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
68 0, 0,
69 ]),
70 i256::from_le_bytes([
71 15, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
72 0, 0,
73 ]),
74 i256::from_le_bytes([
75 159, 134, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
76 0, 0, 0,
77 ]),
78 i256::from_le_bytes([
79 63, 66, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
80 0, 0, 0,
81 ]),
82 i256::from_le_bytes([
83 127, 150, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
84 0, 0, 0, 0,
85 ]),
86 i256::from_le_bytes([
87 255, 224, 245, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
88 0, 0, 0, 0,
89 ]),
90 i256::from_le_bytes([
91 255, 201, 154, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
92 0, 0, 0, 0,
93 ]),
94 i256::from_le_bytes([
95 255, 227, 11, 84, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
96 0, 0, 0, 0,
97 ]),
98 i256::from_le_bytes([
99 255, 231, 118, 72, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
100 0, 0, 0, 0,
101 ]),
102 i256::from_le_bytes([
103 255, 15, 165, 212, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
104 0, 0, 0, 0, 0,
105 ]),
106 i256::from_le_bytes([
107 255, 159, 114, 78, 24, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
108 0, 0, 0, 0,
109 ]),
110 i256::from_le_bytes([
111 255, 63, 122, 16, 243, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
112 0, 0, 0, 0, 0,
113 ]),
114 i256::from_le_bytes([
115 255, 127, 198, 164, 126, 141, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
116 0, 0, 0, 0, 0, 0,
117 ]),
118 i256::from_le_bytes([
119 255, 255, 192, 111, 242, 134, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
120 0, 0, 0, 0, 0, 0,
121 ]),
122 i256::from_le_bytes([
123 255, 255, 137, 93, 120, 69, 99, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
124 0, 0, 0, 0, 0,
125 ]),
126 i256::from_le_bytes([
127 255, 255, 99, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
128 0, 0, 0, 0, 0, 0,
129 ]),
130 i256::from_le_bytes([
131 255, 255, 231, 137, 4, 35, 199, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
132 0, 0, 0, 0, 0, 0,
133 ]),
134 i256::from_le_bytes([
135 255, 255, 15, 99, 45, 94, 199, 107, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
136 0, 0, 0, 0, 0, 0,
137 ]),
138 i256::from_le_bytes([
139 255, 255, 159, 222, 197, 173, 201, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
140 0, 0, 0, 0, 0, 0, 0,
141 ]),
142 i256::from_le_bytes([
143 255, 255, 63, 178, 186, 201, 224, 25, 30, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
144 0, 0, 0, 0, 0, 0, 0,
145 ]),
146 i256::from_le_bytes([
147 255, 255, 127, 246, 74, 225, 199, 2, 45, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
148 0, 0, 0, 0, 0, 0, 0,
149 ]),
150 i256::from_le_bytes([
151 255, 255, 255, 160, 237, 204, 206, 27, 194, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
152 0, 0, 0, 0, 0, 0, 0, 0,
153 ]),
154 i256::from_le_bytes([
155 255, 255, 255, 73, 72, 1, 20, 22, 149, 69, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
156 0, 0, 0, 0, 0, 0,
157 ]),
158 i256::from_le_bytes([
159 255, 255, 255, 227, 210, 12, 200, 220, 210, 183, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
160 0, 0, 0, 0, 0, 0, 0, 0,
161 ]),
162 i256::from_le_bytes([
163 255, 255, 255, 231, 60, 128, 208, 159, 60, 46, 59, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
164 0, 0, 0, 0, 0, 0, 0, 0,
165 ]),
166 i256::from_le_bytes([
167 255, 255, 255, 15, 97, 2, 37, 62, 94, 206, 79, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
168 0, 0, 0, 0, 0, 0, 0,
169 ]),
170 i256::from_le_bytes([
171 255, 255, 255, 159, 202, 23, 114, 109, 174, 15, 30, 67, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
172 0, 0, 0, 0, 0, 0, 0, 0,
173 ]),
174 i256::from_le_bytes([
175 255, 255, 255, 63, 234, 237, 116, 70, 208, 156, 44, 159, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
176 0, 0, 0, 0, 0, 0, 0, 0, 0,
177 ]),
178 i256::from_le_bytes([
179 255, 255, 255, 127, 38, 75, 145, 192, 34, 32, 190, 55, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
180 0, 0, 0, 0, 0, 0, 0, 0, 0,
181 ]),
182 i256::from_le_bytes([
183 255, 255, 255, 255, 128, 239, 172, 133, 91, 65, 109, 45, 238, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
184 0, 0, 0, 0, 0, 0, 0, 0, 0,
185 ]),
186 i256::from_le_bytes([
187 255, 255, 255, 255, 9, 91, 193, 56, 147, 141, 68, 198, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
188 0, 0, 0, 0, 0, 0, 0, 0, 0,
189 ]),
190 i256::from_le_bytes([
191 255, 255, 255, 255, 99, 142, 141, 55, 192, 135, 173, 190, 9, 237, 1, 0, 0, 0, 0, 0, 0, 0,
192 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
193 ]),
194 i256::from_le_bytes([
195 255, 255, 255, 255, 231, 143, 135, 43, 130, 77, 199, 114, 97, 66, 19, 0, 0, 0, 0, 0, 0, 0,
196 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
197 ]),
198 i256::from_le_bytes([
199 255, 255, 255, 255, 15, 159, 75, 179, 21, 7, 201, 123, 206, 151, 192, 0, 0, 0, 0, 0, 0, 0,
200 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
201 ]),
202 i256::from_le_bytes([
203 255, 255, 255, 255, 159, 54, 244, 0, 217, 70, 218, 213, 16, 238, 133, 7, 0, 0, 0, 0, 0, 0,
204 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
205 ]),
206 i256::from_le_bytes([
207 255, 255, 255, 255, 63, 34, 138, 9, 122, 196, 134, 90, 168, 76, 59, 75, 0, 0, 0, 0, 0, 0,
208 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
209 ]),
210 i256::from_le_bytes([
211 255, 255, 255, 255, 127, 86, 101, 95, 196, 172, 67, 137, 147, 254, 80, 240, 2, 0, 0, 0, 0,
212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
213 ]),
214 i256::from_le_bytes([
215 255, 255, 255, 255, 255, 96, 245, 185, 171, 191, 164, 92, 195, 241, 41, 99, 29, 0, 0, 0, 0,
216 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
217 ]),
218 i256::from_le_bytes([
219 255, 255, 255, 255, 255, 201, 149, 67, 181, 124, 111, 158, 161, 113, 163, 223, 37, 1, 0, 0,
220 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
221 ]),
222 i256::from_le_bytes([
223 255, 255, 255, 255, 255, 227, 217, 163, 20, 223, 90, 48, 80, 112, 98, 188, 122, 11, 0, 0,
224 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
225 ]),
226 i256::from_le_bytes([
227 255, 255, 255, 255, 255, 231, 130, 102, 206, 182, 140, 227, 33, 99, 216, 91, 203, 114, 0,
228 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
229 ]),
230 i256::from_le_bytes([
231 255, 255, 255, 255, 255, 15, 29, 1, 16, 36, 127, 227, 82, 223, 115, 150, 241, 123, 4, 0, 0,
232 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
233 ]),
234 i256::from_le_bytes([
235 255, 255, 255, 255, 255, 159, 34, 11, 160, 104, 247, 226, 60, 185, 134, 224, 111, 215, 44,
236 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
237 ]),
238 i256::from_le_bytes([
239 255, 255, 255, 255, 255, 63, 90, 111, 64, 22, 170, 221, 96, 60, 67, 197, 94, 106, 192, 1,
240 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
241 ]),
242 i256::from_le_bytes([
243 255, 255, 255, 255, 255, 127, 134, 89, 132, 222, 164, 168, 200, 91, 160, 180, 179, 39, 132,
244 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
245 ]),
246 i256::from_le_bytes([
247 255, 255, 255, 255, 255, 255, 64, 127, 43, 177, 112, 150, 214, 149, 67, 14, 5, 141, 41,
248 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
249 ]),
250 i256::from_le_bytes([
251 255, 255, 255, 255, 255, 255, 137, 248, 178, 235, 102, 224, 97, 218, 163, 142, 50, 130,
252 159, 215, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
253 ]),
254 i256::from_le_bytes([
255 255, 255, 255, 255, 255, 255, 99, 181, 253, 52, 5, 196, 210, 135, 102, 146, 249, 21, 59,
256 108, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
257 ]),
258 i256::from_le_bytes([
259 255, 255, 255, 255, 255, 255, 231, 21, 233, 17, 52, 168, 59, 78, 1, 184, 191, 219, 78, 58,
260 172, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
261 ]),
262 i256::from_le_bytes([
263 255, 255, 255, 255, 255, 255, 15, 219, 26, 179, 8, 146, 84, 14, 13, 48, 125, 149, 20, 71,
264 186, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
265 ]),
266 i256::from_le_bytes([
267 255, 255, 255, 255, 255, 255, 159, 142, 12, 255, 86, 180, 77, 143, 130, 224, 227, 214, 205,
268 198, 70, 11, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
269 ]),
270 i256::from_le_bytes([
271 255, 255, 255, 255, 255, 255, 63, 146, 125, 246, 101, 11, 9, 153, 25, 197, 230, 100, 10,
272 196, 195, 112, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
273 ]),
274 i256::from_le_bytes([
275 255, 255, 255, 255, 255, 255, 127, 182, 231, 160, 251, 113, 90, 250, 255, 178, 3, 241, 103,
276 168, 165, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
277 ]),
278 i256::from_le_bytes([
279 255, 255, 255, 255, 255, 255, 255, 32, 13, 73, 212, 115, 136, 199, 255, 253, 36, 106, 15,
280 148, 120, 12, 20, 4, 0, 0, 0, 0, 0, 0, 0, 0,
281 ]),
282 i256::from_le_bytes([
283 255, 255, 255, 255, 255, 255, 255, 73, 131, 218, 74, 134, 84, 203, 253, 235, 113, 37, 154,
284 200, 181, 124, 200, 40, 0, 0, 0, 0, 0, 0, 0, 0,
285 ]),
286 i256::from_le_bytes([
287 255, 255, 255, 255, 255, 255, 255, 227, 32, 137, 236, 62, 77, 241, 233, 55, 115, 118, 5,
288 214, 25, 223, 212, 151, 1, 0, 0, 0, 0, 0, 0, 0,
289 ]),
290 i256::from_le_bytes([
291 255, 255, 255, 255, 255, 255, 255, 231, 72, 91, 61, 117, 4, 109, 35, 47, 128, 160, 54, 92,
292 2, 183, 80, 238, 15, 0, 0, 0, 0, 0, 0, 0,
293 ]),
294 i256::from_le_bytes([
295 255, 255, 255, 255, 255, 255, 255, 15, 217, 144, 101, 148, 44, 66, 98, 215, 1, 69, 34, 154,
296 23, 38, 39, 79, 159, 0, 0, 0, 0, 0, 0, 0,
297 ]),
298 i256::from_le_bytes([
299 255, 255, 255, 255, 255, 255, 255, 159, 122, 168, 247, 203, 189, 149, 214, 105, 18, 178,
300 86, 5, 236, 124, 135, 23, 57, 6, 0, 0, 0, 0, 0, 0,
301 ]),
302 i256::from_le_bytes([
303 255, 255, 255, 255, 255, 255, 255, 63, 202, 148, 172, 247, 105, 217, 97, 34, 184, 244, 98,
304 53, 56, 225, 74, 235, 58, 62, 0, 0, 0, 0, 0, 0,
305 ]),
306 i256::from_le_bytes([
307 255, 255, 255, 255, 255, 255, 255, 127, 230, 207, 189, 172, 35, 126, 210, 87, 49, 143, 221,
308 21, 50, 204, 236, 48, 77, 110, 2, 0, 0, 0, 0, 0,
309 ]),
310 i256::from_le_bytes([
311 255, 255, 255, 255, 255, 255, 255, 255, 0, 31, 106, 191, 100, 237, 56, 110, 237, 151, 167,
312 218, 244, 249, 63, 233, 3, 79, 24, 0, 0, 0, 0, 0,
313 ]),
314 i256::from_le_bytes([
315 255, 255, 255, 255, 255, 255, 255, 255, 9, 54, 37, 122, 239, 69, 57, 78, 70, 239, 139, 138,
316 144, 195, 127, 28, 39, 22, 243, 0, 0, 0, 0, 0,
317 ]),
318 i256::from_le_bytes([
319 255, 255, 255, 255, 255, 255, 255, 255, 99, 28, 116, 197, 90, 187, 60, 14, 191, 88, 119,
320 105, 165, 163, 253, 28, 135, 221, 126, 9, 0, 0, 0, 0,
321 ]),
322 i256::from_le_bytes([
323 255, 255, 255, 255, 255, 255, 255, 255, 231, 27, 137, 182, 139, 81, 95, 142, 118, 119, 169,
324 30, 118, 100, 232, 33, 71, 167, 244, 94, 0, 0, 0, 0,
325 ]),
326 i256::from_le_bytes([
327 255, 255, 255, 255, 255, 255, 255, 255, 15, 23, 91, 33, 117, 47, 185, 143, 161, 170, 158,
328 50, 157, 236, 19, 83, 199, 136, 142, 181, 3, 0, 0, 0,
329 ]),
330 i256::from_le_bytes([
331 255, 255, 255, 255, 255, 255, 255, 255, 159, 230, 142, 77, 147, 218, 59, 157, 79, 170, 50,
332 250, 35, 62, 199, 62, 201, 87, 145, 23, 37, 0, 0, 0,
333 ]),
334 i256::from_le_bytes([
335 255, 255, 255, 255, 255, 255, 255, 255, 63, 2, 149, 7, 193, 137, 86, 36, 28, 167, 250, 197,
336 103, 109, 200, 115, 220, 109, 173, 235, 114, 1, 0, 0,
337 ]),
338 i256::from_le_bytes([
339 255, 255, 255, 255, 255, 255, 255, 255, 127, 22, 210, 75, 138, 97, 97, 107, 25, 135, 202,
340 187, 13, 70, 212, 133, 156, 74, 198, 52, 125, 14, 0, 0,
341 ]),
342 i256::from_le_bytes([
343 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 52, 246, 102, 207, 205, 49, 254, 70, 233,
344 85, 137, 188, 74, 58, 29, 234, 190, 15, 228, 144, 0, 0,
345 ]),
346 i256::from_le_bytes([
347 255, 255, 255, 255, 255, 255, 255, 255, 255, 201, 16, 158, 5, 26, 10, 242, 237, 197, 28,
348 91, 93, 93, 235, 70, 36, 37, 117, 157, 232, 168, 5, 0,
349 ]),
350 i256::from_le_bytes([
351 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 167, 44, 56, 4, 101, 116, 75, 187, 31,
352 143, 165, 165, 49, 197, 106, 115, 147, 38, 22, 153, 56, 0,
353 ]),
354 i256::from_le_bytes([
355 255, 255, 255, 255, 255, 255, 255, 255, 255, 231, 142, 190, 49, 42, 242, 139, 242, 80, 61,
356 151, 119, 120, 240, 179, 43, 130, 194, 129, 221, 250, 53, 2,
357 ]),
358 i256::from_le_bytes([
359 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 149, 113, 241, 165, 117, 119, 121, 41,
360 101, 232, 171, 180, 100, 7, 181, 21, 153, 17, 167, 204, 27, 22,
361 ]),
362];
363
364pub const MIN_DECIMAL256_FOR_EACH_PRECISION: [i256; 77] = [
384 i256::from_i128(0_i128), i256::from_le_bytes([
386 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
387 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
388 ]),
389 i256::from_le_bytes([
390 157, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
391 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
392 ]),
393 i256::from_le_bytes([
394 25, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
395 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
396 ]),
397 i256::from_le_bytes([
398 241, 216, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
399 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
400 ]),
401 i256::from_le_bytes([
402 97, 121, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
403 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
404 ]),
405 i256::from_le_bytes([
406 193, 189, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
407 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
408 ]),
409 i256::from_le_bytes([
410 129, 105, 103, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
411 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
412 ]),
413 i256::from_le_bytes([
414 1, 31, 10, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
415 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
416 ]),
417 i256::from_le_bytes([
418 1, 54, 101, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
419 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
420 ]),
421 i256::from_le_bytes([
422 1, 28, 244, 171, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
423 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
424 ]),
425 i256::from_le_bytes([
426 1, 24, 137, 183, 232, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
427 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
428 ]),
429 i256::from_le_bytes([
430 1, 240, 90, 43, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
431 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
432 ]),
433 i256::from_le_bytes([
434 1, 96, 141, 177, 231, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
435 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
436 ]),
437 i256::from_le_bytes([
438 1, 192, 133, 239, 12, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
439 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
440 ]),
441 i256::from_le_bytes([
442 1, 128, 57, 91, 129, 114, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
443 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
444 ]),
445 i256::from_le_bytes([
446 1, 0, 63, 144, 13, 121, 220, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
447 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
448 ]),
449 i256::from_le_bytes([
450 1, 0, 118, 162, 135, 186, 156, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
451 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
452 ]),
453 i256::from_le_bytes([
454 1, 0, 156, 88, 76, 73, 31, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
455 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
456 ]),
457 i256::from_le_bytes([
458 1, 0, 24, 118, 251, 220, 56, 117, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
459 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
460 ]),
461 i256::from_le_bytes([
462 1, 0, 240, 156, 210, 161, 56, 148, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
463 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
464 ]),
465 i256::from_le_bytes([
466 1, 0, 96, 33, 58, 82, 54, 202, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
467 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
468 ]),
469 i256::from_le_bytes([
470 1, 0, 192, 77, 69, 54, 31, 230, 225, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
471 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
472 ]),
473 i256::from_le_bytes([
474 1, 0, 128, 9, 181, 30, 56, 253, 210, 234, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
475 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
476 ]),
477 i256::from_le_bytes([
478 1, 0, 0, 95, 18, 51, 49, 228, 61, 44, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
479 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
480 ]),
481 i256::from_le_bytes([
482 1, 0, 0, 182, 183, 254, 235, 233, 106, 186, 247, 255, 255, 255, 255, 255, 255, 255, 255,
483 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
484 ]),
485 i256::from_le_bytes([
486 1, 0, 0, 28, 45, 243, 55, 35, 45, 72, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255,
487 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
488 ]),
489 i256::from_le_bytes([
490 1, 0, 0, 24, 195, 127, 47, 96, 195, 209, 196, 252, 255, 255, 255, 255, 255, 255, 255, 255,
491 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
492 ]),
493 i256::from_le_bytes([
494 1, 0, 0, 240, 158, 253, 218, 193, 161, 49, 176, 223, 255, 255, 255, 255, 255, 255, 255,
495 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
496 ]),
497 i256::from_le_bytes([
498 1, 0, 0, 96, 53, 232, 141, 146, 81, 240, 225, 188, 254, 255, 255, 255, 255, 255, 255, 255,
499 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
500 ]),
501 i256::from_le_bytes([
502 1, 0, 0, 192, 21, 18, 139, 185, 47, 99, 211, 96, 243, 255, 255, 255, 255, 255, 255, 255,
503 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
504 ]),
505 i256::from_le_bytes([
506 1, 0, 0, 128, 217, 180, 110, 63, 221, 223, 65, 200, 129, 255, 255, 255, 255, 255, 255, 255,
507 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
508 ]),
509 i256::from_le_bytes([
510 1, 0, 0, 0, 127, 16, 83, 122, 164, 190, 146, 210, 17, 251, 255, 255, 255, 255, 255, 255,
511 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
512 ]),
513 i256::from_le_bytes([
514 1, 0, 0, 0, 246, 164, 62, 199, 108, 114, 187, 57, 178, 206, 255, 255, 255, 255, 255, 255,
515 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
516 ]),
517 i256::from_le_bytes([
518 1, 0, 0, 0, 156, 113, 114, 200, 63, 120, 82, 65, 246, 18, 254, 255, 255, 255, 255, 255,
519 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
520 ]),
521 i256::from_le_bytes([
522 1, 0, 0, 0, 24, 112, 120, 212, 125, 178, 56, 141, 158, 189, 236, 255, 255, 255, 255, 255,
523 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
524 ]),
525 i256::from_le_bytes([
526 1, 0, 0, 0, 240, 96, 180, 76, 234, 248, 54, 132, 49, 104, 63, 255, 255, 255, 255, 255, 255,
527 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
528 ]),
529 i256::from_le_bytes([
530 1, 0, 0, 0, 96, 201, 11, 255, 38, 185, 37, 42, 239, 17, 122, 248, 255, 255, 255, 255, 255,
531 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
532 ]),
533 i256::from_le_bytes([
534 1, 0, 0, 0, 192, 221, 117, 246, 133, 59, 121, 165, 87, 179, 196, 180, 255, 255, 255, 255,
535 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
536 ]),
537 i256::from_le_bytes([
538 1, 0, 0, 0, 128, 169, 154, 160, 59, 83, 188, 118, 108, 1, 175, 15, 253, 255, 255, 255, 255,
539 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
540 ]),
541 i256::from_le_bytes([
542 1, 0, 0, 0, 0, 159, 10, 70, 84, 64, 91, 163, 60, 14, 214, 156, 226, 255, 255, 255, 255,
543 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
544 ]),
545 i256::from_le_bytes([
546 1, 0, 0, 0, 0, 54, 106, 188, 74, 131, 144, 97, 94, 142, 92, 32, 218, 254, 255, 255, 255,
547 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
548 ]),
549 i256::from_le_bytes([
550 1, 0, 0, 0, 0, 28, 38, 92, 235, 32, 165, 207, 175, 143, 157, 67, 133, 244, 255, 255, 255,
551 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
552 ]),
553 i256::from_le_bytes([
554 1, 0, 0, 0, 0, 24, 125, 153, 49, 73, 115, 28, 222, 156, 39, 164, 52, 141, 255, 255, 255,
555 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
556 ]),
557 i256::from_le_bytes([
558 1, 0, 0, 0, 0, 240, 226, 254, 239, 219, 128, 28, 173, 32, 140, 105, 14, 132, 251, 255, 255,
559 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
560 ]),
561 i256::from_le_bytes([
562 1, 0, 0, 0, 0, 96, 221, 244, 95, 151, 8, 29, 195, 70, 121, 31, 144, 40, 211, 255, 255, 255,
563 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
564 ]),
565 i256::from_le_bytes([
566 1, 0, 0, 0, 0, 192, 165, 144, 191, 233, 85, 34, 159, 195, 188, 58, 161, 149, 63, 254, 255,
567 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
568 ]),
569 i256::from_le_bytes([
570 1, 0, 0, 0, 0, 128, 121, 166, 123, 33, 91, 87, 55, 164, 95, 75, 76, 216, 123, 238, 255,
571 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
572 ]),
573 i256::from_le_bytes([
574 1, 0, 0, 0, 0, 0, 191, 128, 212, 78, 143, 105, 41, 106, 188, 241, 250, 114, 214, 80, 255,
575 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
576 ]),
577 i256::from_le_bytes([
578 1, 0, 0, 0, 0, 0, 118, 7, 77, 20, 153, 31, 158, 37, 92, 113, 205, 125, 96, 40, 249, 255,
579 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
580 ]),
581 i256::from_le_bytes([
582 1, 0, 0, 0, 0, 0, 156, 74, 2, 203, 250, 59, 45, 120, 153, 109, 6, 234, 196, 147, 187, 255,
583 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
584 ]),
585 i256::from_le_bytes([
586 1, 0, 0, 0, 0, 0, 24, 234, 22, 238, 203, 87, 196, 177, 254, 71, 64, 36, 177, 197, 83, 253,
587 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
588 ]),
589 i256::from_le_bytes([
590 1, 0, 0, 0, 0, 0, 240, 36, 229, 76, 247, 109, 171, 241, 242, 207, 130, 106, 235, 184, 69,
591 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
592 ]),
593 i256::from_le_bytes([
594 1, 0, 0, 0, 0, 0, 96, 113, 243, 0, 169, 75, 178, 112, 125, 31, 28, 41, 50, 57, 185, 244,
595 254, 255, 255, 255, 255, 255, 255, 255, 255, 255,
596 ]),
597 i256::from_le_bytes([
598 1, 0, 0, 0, 0, 0, 192, 109, 130, 9, 154, 244, 246, 102, 230, 58, 25, 155, 245, 59, 60, 143,
599 245, 255, 255, 255, 255, 255, 255, 255, 255, 255,
600 ]),
601 i256::from_le_bytes([
602 1, 0, 0, 0, 0, 0, 128, 73, 24, 95, 4, 142, 165, 5, 0, 77, 252, 14, 152, 87, 90, 152, 151,
603 255, 255, 255, 255, 255, 255, 255, 255, 255,
604 ]),
605 i256::from_le_bytes([
606 1, 0, 0, 0, 0, 0, 0, 223, 242, 182, 43, 140, 119, 56, 0, 2, 219, 149, 240, 107, 135, 243,
607 235, 251, 255, 255, 255, 255, 255, 255, 255, 255,
608 ]),
609 i256::from_le_bytes([
610 1, 0, 0, 0, 0, 0, 0, 182, 124, 37, 181, 121, 171, 52, 2, 20, 142, 218, 101, 55, 74, 131,
611 55, 215, 255, 255, 255, 255, 255, 255, 255, 255,
612 ]),
613 i256::from_le_bytes([
614 1, 0, 0, 0, 0, 0, 0, 28, 223, 118, 19, 193, 178, 14, 22, 200, 140, 137, 250, 41, 230, 32,
615 43, 104, 254, 255, 255, 255, 255, 255, 255, 255,
616 ]),
617 i256::from_le_bytes([
618 1, 0, 0, 0, 0, 0, 0, 24, 183, 164, 194, 138, 251, 146, 220, 208, 127, 95, 201, 163, 253,
619 72, 175, 17, 240, 255, 255, 255, 255, 255, 255, 255,
620 ]),
621 i256::from_le_bytes([
622 1, 0, 0, 0, 0, 0, 0, 240, 38, 111, 154, 107, 211, 189, 157, 40, 254, 186, 221, 101, 232,
623 217, 216, 176, 96, 255, 255, 255, 255, 255, 255, 255,
624 ]),
625 i256::from_le_bytes([
626 1, 0, 0, 0, 0, 0, 0, 96, 133, 87, 8, 52, 66, 106, 41, 150, 237, 77, 169, 250, 19, 131, 120,
627 232, 198, 249, 255, 255, 255, 255, 255, 255,
628 ]),
629 i256::from_le_bytes([
630 1, 0, 0, 0, 0, 0, 0, 192, 53, 107, 83, 8, 150, 38, 158, 221, 71, 11, 157, 202, 199, 30,
631 181, 20, 197, 193, 255, 255, 255, 255, 255, 255,
632 ]),
633 i256::from_le_bytes([
634 1, 0, 0, 0, 0, 0, 0, 128, 25, 48, 66, 83, 220, 129, 45, 168, 206, 112, 34, 234, 205, 51,
635 19, 207, 178, 145, 253, 255, 255, 255, 255, 255,
636 ]),
637 i256::from_le_bytes([
638 1, 0, 0, 0, 0, 0, 0, 0, 255, 224, 149, 64, 155, 18, 199, 145, 18, 104, 88, 37, 11, 6, 192,
639 22, 252, 176, 231, 255, 255, 255, 255, 255,
640 ]),
641 i256::from_le_bytes([
642 1, 0, 0, 0, 0, 0, 0, 0, 246, 201, 218, 133, 16, 186, 198, 177, 185, 16, 116, 117, 111, 60,
643 128, 227, 216, 233, 12, 255, 255, 255, 255, 255,
644 ]),
645 i256::from_le_bytes([
646 1, 0, 0, 0, 0, 0, 0, 0, 156, 227, 139, 58, 165, 68, 195, 241, 64, 167, 136, 150, 90, 92, 2,
647 227, 120, 34, 129, 246, 255, 255, 255, 255,
648 ]),
649 i256::from_le_bytes([
650 1, 0, 0, 0, 0, 0, 0, 0, 24, 228, 118, 73, 116, 174, 160, 113, 137, 136, 86, 225, 137, 155,
651 23, 222, 184, 88, 11, 161, 255, 255, 255, 255,
652 ]),
653 i256::from_le_bytes([
654 1, 0, 0, 0, 0, 0, 0, 0, 240, 232, 164, 222, 138, 208, 70, 112, 94, 85, 97, 205, 98, 19,
655 236, 172, 56, 119, 113, 74, 252, 255, 255, 255,
656 ]),
657 i256::from_le_bytes([
658 1, 0, 0, 0, 0, 0, 0, 0, 96, 25, 113, 178, 108, 37, 196, 98, 176, 85, 205, 5, 220, 193, 56,
659 193, 54, 168, 110, 232, 218, 255, 255, 255,
660 ]),
661 i256::from_le_bytes([
662 1, 0, 0, 0, 0, 0, 0, 0, 192, 253, 106, 248, 62, 118, 169, 219, 227, 88, 5, 58, 152, 146,
663 55, 140, 35, 146, 82, 20, 141, 254, 255, 255,
664 ]),
665 i256::from_le_bytes([
666 1, 0, 0, 0, 0, 0, 0, 0, 128, 233, 45, 180, 117, 158, 158, 148, 230, 120, 53, 68, 242, 185,
667 43, 122, 99, 181, 57, 203, 130, 241, 255, 255,
668 ]),
669 i256::from_le_bytes([
670 1, 0, 0, 0, 0, 0, 0, 0, 0, 31, 203, 9, 153, 48, 50, 206, 1, 185, 22, 170, 118, 67, 181,
671 197, 226, 21, 65, 240, 27, 111, 255, 255,
672 ]),
673 i256::from_le_bytes([
674 1, 0, 0, 0, 0, 0, 0, 0, 0, 54, 239, 97, 250, 229, 245, 13, 18, 58, 227, 164, 162, 162, 20,
675 185, 219, 218, 138, 98, 23, 87, 250, 255,
676 ]),
677 i256::from_le_bytes([
678 1, 0, 0, 0, 0, 0, 0, 0, 0, 28, 88, 211, 199, 251, 154, 139, 180, 68, 224, 112, 90, 90, 206,
679 58, 149, 140, 108, 217, 233, 102, 199, 255,
680 ]),
681 i256::from_le_bytes([
682 1, 0, 0, 0, 0, 0, 0, 0, 0, 24, 113, 65, 206, 213, 13, 116, 13, 175, 194, 104, 136, 135, 15,
683 76, 212, 125, 61, 126, 34, 5, 202, 253,
684 ]),
685 i256::from_le_bytes([
686 1, 0, 0, 0, 0, 0, 0, 0, 0, 240, 106, 142, 14, 90, 138, 136, 134, 214, 154, 23, 84, 75, 155,
687 248, 74, 234, 102, 238, 88, 51, 228, 233,
688 ]),
689];
690
691#[deprecated(
696 since = "54.1.0",
697 note = "Use MAX_DECIMAL128_FOR_EACH_PRECISION (note indexes are different)"
698)]
699#[allow(dead_code)] pub const MAX_DECIMAL_FOR_EACH_PRECISION: [i128; 38] = [
701 9,
702 99,
703 999,
704 9999,
705 99999,
706 999999,
707 9999999,
708 99999999,
709 999999999,
710 9999999999,
711 99999999999,
712 999999999999,
713 9999999999999,
714 99999999999999,
715 999999999999999,
716 9999999999999999,
717 99999999999999999,
718 999999999999999999,
719 9999999999999999999,
720 99999999999999999999,
721 999999999999999999999,
722 9999999999999999999999,
723 99999999999999999999999,
724 999999999999999999999999,
725 9999999999999999999999999,
726 99999999999999999999999999,
727 999999999999999999999999999,
728 9999999999999999999999999999,
729 99999999999999999999999999999,
730 999999999999999999999999999999,
731 9999999999999999999999999999999,
732 99999999999999999999999999999999,
733 999999999999999999999999999999999,
734 9999999999999999999999999999999999,
735 99999999999999999999999999999999999,
736 999999999999999999999999999999999999,
737 9999999999999999999999999999999999999,
738 99999999999999999999999999999999999999,
739];
740
741#[allow(dead_code)] #[deprecated(
747 since = "54.1.0",
748 note = "Use MIN_DECIMAL128_FOR_EACH_PRECISION (note indexes are different)"
749)]
750pub const MIN_DECIMAL_FOR_EACH_PRECISION: [i128; 38] = [
751 -9,
752 -99,
753 -999,
754 -9999,
755 -99999,
756 -999999,
757 -9999999,
758 -99999999,
759 -999999999,
760 -9999999999,
761 -99999999999,
762 -999999999999,
763 -9999999999999,
764 -99999999999999,
765 -999999999999999,
766 -9999999999999999,
767 -99999999999999999,
768 -999999999999999999,
769 -9999999999999999999,
770 -99999999999999999999,
771 -999999999999999999999,
772 -9999999999999999999999,
773 -99999999999999999999999,
774 -999999999999999999999999,
775 -9999999999999999999999999,
776 -99999999999999999999999999,
777 -999999999999999999999999999,
778 -9999999999999999999999999999,
779 -99999999999999999999999999999,
780 -999999999999999999999999999999,
781 -9999999999999999999999999999999,
782 -99999999999999999999999999999999,
783 -999999999999999999999999999999999,
784 -9999999999999999999999999999999999,
785 -99999999999999999999999999999999999,
786 -999999999999999999999999999999999999,
787 -9999999999999999999999999999999999999,
788 -99999999999999999999999999999999999999,
789];
790
791pub const MAX_DECIMAL128_FOR_EACH_PRECISION: [i128; 39] = [
807 0, 9,
809 99,
810 999,
811 9999,
812 99999,
813 999999,
814 9999999,
815 99999999,
816 999999999,
817 9999999999,
818 99999999999,
819 999999999999,
820 9999999999999,
821 99999999999999,
822 999999999999999,
823 9999999999999999,
824 99999999999999999,
825 999999999999999999,
826 9999999999999999999,
827 99999999999999999999,
828 999999999999999999999,
829 9999999999999999999999,
830 99999999999999999999999,
831 999999999999999999999999,
832 9999999999999999999999999,
833 99999999999999999999999999,
834 999999999999999999999999999,
835 9999999999999999999999999999,
836 99999999999999999999999999999,
837 999999999999999999999999999999,
838 9999999999999999999999999999999,
839 99999999999999999999999999999999,
840 999999999999999999999999999999999,
841 9999999999999999999999999999999999,
842 99999999999999999999999999999999999,
843 999999999999999999999999999999999999,
844 9999999999999999999999999999999999999,
845 99999999999999999999999999999999999999,
846];
847
848pub const MIN_DECIMAL128_FOR_EACH_PRECISION: [i128; 39] = [
864 0, -9,
866 -99,
867 -999,
868 -9999,
869 -99999,
870 -999999,
871 -9999999,
872 -99999999,
873 -999999999,
874 -9999999999,
875 -99999999999,
876 -999999999999,
877 -9999999999999,
878 -99999999999999,
879 -999999999999999,
880 -9999999999999999,
881 -99999999999999999,
882 -999999999999999999,
883 -9999999999999999999,
884 -99999999999999999999,
885 -999999999999999999999,
886 -9999999999999999999999,
887 -99999999999999999999999,
888 -999999999999999999999999,
889 -9999999999999999999999999,
890 -99999999999999999999999999,
891 -999999999999999999999999999,
892 -9999999999999999999999999999,
893 -99999999999999999999999999999,
894 -999999999999999999999999999999,
895 -9999999999999999999999999999999,
896 -99999999999999999999999999999999,
897 -999999999999999999999999999999999,
898 -9999999999999999999999999999999999,
899 -99999999999999999999999999999999999,
900 -999999999999999999999999999999999999,
901 -9999999999999999999999999999999999999,
902 -99999999999999999999999999999999999999,
903];
904
905pub const MAX_DECIMAL64_FOR_EACH_PRECISION: [i64; 19] = [
921 0, 9,
923 99,
924 999,
925 9999,
926 99999,
927 999999,
928 9999999,
929 99999999,
930 999999999,
931 9999999999,
932 99999999999,
933 999999999999,
934 9999999999999,
935 99999999999999,
936 999999999999999,
937 9999999999999999,
938 99999999999999999,
939 999999999999999999,
940];
941
942pub const MIN_DECIMAL64_FOR_EACH_PRECISION: [i64; 19] = [
958 0, -9,
960 -99,
961 -999,
962 -9999,
963 -99999,
964 -999999,
965 -9999999,
966 -99999999,
967 -999999999,
968 -9999999999,
969 -99999999999,
970 -999999999999,
971 -9999999999999,
972 -99999999999999,
973 -999999999999999,
974 -9999999999999999,
975 -99999999999999999,
976 -999999999999999999,
977];
978
979pub const MAX_DECIMAL32_FOR_EACH_PRECISION: [i32; 10] = [
995 0, 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999,
997];
998
999pub const MIN_DECIMAL32_FOR_EACH_PRECISION: [i32; 10] = [
1015 0, -9, -99, -999, -9999, -99999, -999999, -9999999, -99999999, -999999999,
1017];
1018
1019#[inline]
1024pub fn validate_decimal32_precision(value: i32, precision: u8) -> Result<(), ArrowError> {
1025 if precision > DECIMAL32_MAX_PRECISION {
1026 return Err(ArrowError::InvalidArgumentError(format!(
1027 "Max precision of a Decimal32 is {DECIMAL32_MAX_PRECISION}, but got {precision}",
1028 )));
1029 }
1030 if value > MAX_DECIMAL32_FOR_EACH_PRECISION[precision as usize] {
1031 Err(ArrowError::InvalidArgumentError(format!(
1032 "{value} is too large to store in a Decimal32 of precision {precision}. Max is {}",
1033 MAX_DECIMAL32_FOR_EACH_PRECISION[precision as usize]
1034 )))
1035 } else if value < MIN_DECIMAL32_FOR_EACH_PRECISION[precision as usize] {
1036 Err(ArrowError::InvalidArgumentError(format!(
1037 "{value} is too small to store in a Decimal32 of precision {precision}. Min is {}",
1038 MIN_DECIMAL32_FOR_EACH_PRECISION[precision as usize]
1039 )))
1040 } else {
1041 Ok(())
1042 }
1043}
1044
1045#[inline]
1050pub fn is_validate_decimal32_precision(value: i32, precision: u8) -> bool {
1051 precision <= DECIMAL32_MAX_PRECISION
1052 && value >= MIN_DECIMAL32_FOR_EACH_PRECISION[precision as usize]
1053 && value <= MAX_DECIMAL32_FOR_EACH_PRECISION[precision as usize]
1054}
1055
1056#[inline]
1061pub fn validate_decimal64_precision(value: i64, precision: u8) -> Result<(), ArrowError> {
1062 if precision > DECIMAL64_MAX_PRECISION {
1063 return Err(ArrowError::InvalidArgumentError(format!(
1064 "Max precision of a Decimal64 is {DECIMAL64_MAX_PRECISION}, but got {precision}",
1065 )));
1066 }
1067 if value > MAX_DECIMAL64_FOR_EACH_PRECISION[precision as usize] {
1068 Err(ArrowError::InvalidArgumentError(format!(
1069 "{value} is too large to store in a Decimal64 of precision {precision}. Max is {}",
1070 MAX_DECIMAL64_FOR_EACH_PRECISION[precision as usize]
1071 )))
1072 } else if value < MIN_DECIMAL64_FOR_EACH_PRECISION[precision as usize] {
1073 Err(ArrowError::InvalidArgumentError(format!(
1074 "{value} is too small to store in a Decimal64 of precision {precision}. Min is {}",
1075 MIN_DECIMAL64_FOR_EACH_PRECISION[precision as usize]
1076 )))
1077 } else {
1078 Ok(())
1079 }
1080}
1081
1082#[inline]
1087pub fn is_validate_decimal64_precision(value: i64, precision: u8) -> bool {
1088 precision <= DECIMAL64_MAX_PRECISION
1089 && value >= MIN_DECIMAL64_FOR_EACH_PRECISION[precision as usize]
1090 && value <= MAX_DECIMAL64_FOR_EACH_PRECISION[precision as usize]
1091}
1092
1093#[inline]
1098pub fn validate_decimal_precision(value: i128, precision: u8) -> Result<(), ArrowError> {
1099 if precision > DECIMAL128_MAX_PRECISION {
1100 return Err(ArrowError::InvalidArgumentError(format!(
1101 "Max precision of a Decimal128 is {DECIMAL128_MAX_PRECISION}, but got {precision}",
1102 )));
1103 }
1104 if value > MAX_DECIMAL128_FOR_EACH_PRECISION[precision as usize] {
1105 Err(ArrowError::InvalidArgumentError(format!(
1106 "{value} is too large to store in a Decimal128 of precision {precision}. Max is {}",
1107 MAX_DECIMAL128_FOR_EACH_PRECISION[precision as usize]
1108 )))
1109 } else if value < MIN_DECIMAL128_FOR_EACH_PRECISION[precision as usize] {
1110 Err(ArrowError::InvalidArgumentError(format!(
1111 "{value} is too small to store in a Decimal128 of precision {precision}. Min is {}",
1112 MIN_DECIMAL128_FOR_EACH_PRECISION[precision as usize]
1113 )))
1114 } else {
1115 Ok(())
1116 }
1117}
1118
1119#[inline]
1124pub fn is_validate_decimal_precision(value: i128, precision: u8) -> bool {
1125 precision <= DECIMAL128_MAX_PRECISION
1126 && value >= MIN_DECIMAL128_FOR_EACH_PRECISION[precision as usize]
1127 && value <= MAX_DECIMAL128_FOR_EACH_PRECISION[precision as usize]
1128}
1129
1130#[inline]
1135pub fn validate_decimal256_precision(value: i256, precision: u8) -> Result<(), ArrowError> {
1136 if precision > DECIMAL256_MAX_PRECISION {
1137 return Err(ArrowError::InvalidArgumentError(format!(
1138 "Max precision of a Decimal256 is {DECIMAL256_MAX_PRECISION}, but got {precision}",
1139 )));
1140 }
1141 if value > MAX_DECIMAL256_FOR_EACH_PRECISION[precision as usize] {
1142 Err(ArrowError::InvalidArgumentError(format!(
1143 "{value:?} is too large to store in a Decimal256 of precision {precision}. Max is {:?}",
1144 MAX_DECIMAL256_FOR_EACH_PRECISION[precision as usize]
1145 )))
1146 } else if value < MIN_DECIMAL256_FOR_EACH_PRECISION[precision as usize] {
1147 Err(ArrowError::InvalidArgumentError(format!(
1148 "{value:?} is too small to store in a Decimal256 of precision {precision}. Min is {:?}",
1149 MIN_DECIMAL256_FOR_EACH_PRECISION[precision as usize]
1150 )))
1151 } else {
1152 Ok(())
1153 }
1154}
1155
1156#[inline]
1161pub fn is_validate_decimal256_precision(value: i256, precision: u8) -> bool {
1162 precision <= DECIMAL256_MAX_PRECISION
1163 && value >= MIN_DECIMAL256_FOR_EACH_PRECISION[precision as usize]
1164 && value <= MAX_DECIMAL256_FOR_EACH_PRECISION[precision as usize]
1165}