1use crate::scalar::{BigDecimal, BigInt};
2#[cfg(target_arch = "wasm32")]
3use crate::{externs, memory};
4
5#[cfg(target_arch = "wasm32")]
6pub fn foundational_store_get(store_index: u32, req_ptr: u32, req_len: u32) -> u64 {
7 unsafe { externs::state::foundational_store_get_entries(store_index, req_ptr, req_len) }
8}
9
10#[cfg(target_arch = "wasm32")]
11pub fn foundational_store_get_first(store_index: u32, req_ptr: u32, req_len: u32) -> u64 {
12 unsafe { externs::state::foundational_store_get_first_entries(store_index, req_ptr, req_len) }
13}
14
15#[cfg(not(target_arch = "wasm32"))]
17pub fn foundational_store_get(_: u32, _: u32, _: u32) -> u64 {
18 0
19}
20#[cfg(not(target_arch = "wasm32"))]
21pub fn foundational_store_get_first(_: u32, _: u32, _: u32) -> u64 {
22 0
23}
24
25#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
26pub fn get_at<K: AsRef<str>>(store_idx: u32, ord: i64, key: K) -> Option<Vec<u8>> {
27 #[cfg(target_arch = "wasm32")]
28 {
29 let key = key.as_ref();
30
31 unsafe {
32 let key_bytes = key.as_bytes();
33 let output_ptr = memory::alloc(8);
34 let found = externs::state::get_at(
35 store_idx,
36 ord,
37 key_bytes.as_ptr(),
38 key_bytes.len() as u32,
39 output_ptr as u32,
40 );
41 return if found == 1 {
42 Some(memory::get_output_data(output_ptr))
43 } else {
44 None
45 };
46 }
47 }
48
49 #[cfg(not(target_arch = "wasm32"))]
50 None
51}
52
53#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
54pub fn has_at<K: AsRef<str>>(store_idx: u32, ord: i64, key: K) -> bool {
55 #[cfg(target_arch = "wasm32")]
56 {
57 let key = key.as_ref();
58
59 unsafe {
60 let key_bytes = key.as_bytes();
61 let found =
62 externs::state::has_at(store_idx, ord, key_bytes.as_ptr(), key_bytes.len() as u32);
63 return found == 1;
64 }
65 }
66
67 #[cfg(not(target_arch = "wasm32"))]
68 false
69}
70
71#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
72pub fn get_last<K: AsRef<str>>(store_idx: u32, key: K) -> Option<Vec<u8>> {
73 #[cfg(target_arch = "wasm32")]
74 {
75 let key = key.as_ref();
76
77 unsafe {
78 let key_bytes = key.as_bytes();
79 let output_ptr = memory::alloc(8);
80 let found = externs::state::get_last(
81 store_idx,
82 key_bytes.as_ptr(),
83 key_bytes.len() as u32,
84 output_ptr as u32,
85 );
86
87 return if found == 1 {
88 Some(memory::get_output_data(output_ptr))
89 } else {
90 None
91 };
92 }
93 }
94
95 #[cfg(not(target_arch = "wasm32"))]
96 None
97}
98
99#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
100pub fn has_last<K: AsRef<str>>(store_idx: u32, key: K) -> bool {
101 #[cfg(target_arch = "wasm32")]
102 {
103 let key = key.as_ref();
104
105 unsafe {
106 let key_bytes = key.as_bytes();
107 let found =
108 externs::state::has_last(store_idx, key_bytes.as_ptr(), key_bytes.len() as u32);
109 return found == 1;
110 }
111 }
112
113 #[cfg(not(target_arch = "wasm32"))]
114 false
115}
116
117#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
118pub fn get_first<K: AsRef<str>>(store_idx: u32, key: K) -> Option<Vec<u8>> {
119 #[cfg(target_arch = "wasm32")]
120 {
121 let key = key.as_ref();
122
123 unsafe {
124 let key_bytes = key.as_bytes();
125 let output_ptr = memory::alloc(8);
126
127 let found = externs::state::get_first(
128 store_idx,
129 key_bytes.as_ptr(),
130 key_bytes.len() as u32,
131 output_ptr as u32,
132 );
133
134 return if found == 1 {
135 Some(memory::get_output_data(output_ptr))
136 } else {
137 None
138 };
139 }
140 }
141
142 #[cfg(not(target_arch = "wasm32"))]
143 None
144}
145
146#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
147pub fn has_first<K: AsRef<str>>(store_idx: u32, key: K) -> bool {
148 #[cfg(target_arch = "wasm32")]
149 {
150 let key = key.as_ref();
151
152 unsafe {
153 let key_bytes = key.as_bytes();
154 let found =
155 externs::state::has_first(store_idx, key_bytes.as_ptr(), key_bytes.len() as u32);
156 return found == 1;
157 }
158 }
159
160 #[cfg(not(target_arch = "wasm32"))]
161 false
162}
163
164#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
165pub fn set<K, V>(ord: i64, key: K, value: V)
166where
167 K: AsRef<str>,
168 V: AsRef<[u8]>,
169{
170 #[cfg(target_arch = "wasm32")]
171 {
172 let key = key.as_ref();
173 let value = value.as_ref();
174
175 unsafe {
176 externs::state::set(
177 ord,
178 key.as_ptr(),
179 key.len() as u32,
180 value.as_ptr(),
181 value.len() as u32,
182 )
183 }
184 }
185}
186
187#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
188pub fn set_if_not_exists<K, V>(ord: i64, key: K, value: V)
189where
190 K: AsRef<str>,
191 V: AsRef<[u8]>,
192{
193 #[cfg(target_arch = "wasm32")]
194 {
195 let key = key.as_ref();
196 let value = value.as_ref();
197
198 unsafe {
199 externs::state::set_if_not_exists(
200 ord,
201 key.as_ptr(),
202 key.len() as u32,
203 value.as_ptr(),
204 value.len() as u32,
205 )
206 }
207 }
208}
209
210#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
211pub fn append<K, V>(ord: i64, key: K, value: V)
212where
213 K: AsRef<str>,
214 V: AsRef<[u8]>,
215{
216 #[cfg(target_arch = "wasm32")]
217 {
218 let key = key.as_ref();
219 let value = value.as_ref();
220
221 unsafe {
222 externs::state::append(
223 ord,
224 key.as_ptr(),
225 key.len() as u32,
226 value.as_ptr(),
227 value.len() as u32,
228 )
229 }
230 }
231}
232
233#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
234pub fn delete_prefix<K: AsRef<str>>(ord: i64, prefix: K) {
235 #[cfg(target_arch = "wasm32")]
236 {
237 let prefix = prefix.as_ref();
238
239 unsafe { externs::state::delete_prefix(ord, prefix.as_ptr(), prefix.len() as u32) }
240 }
241}
242
243#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
244pub fn add_bigint<K, V>(ord: i64, key: K, value: V)
245where
246 K: AsRef<str>,
247 V: AsRef<BigInt>,
248{
249 #[cfg(target_arch = "wasm32")]
250 {
251 let key = key.as_ref();
252 let big_int = value.as_ref();
253 let data: String = big_int.into();
254
255 unsafe {
256 externs::state::add_bigint(
257 ord,
258 key.as_ptr(),
259 key.len() as u32,
260 data.as_ptr(),
261 data.len() as u32,
262 )
263 }
264 }
265}
266
267#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
268pub fn add_int64<K: AsRef<str>>(ord: i64, key: K, value: i64) {
269 #[cfg(target_arch = "wasm32")]
270 {
271 let key = key.as_ref();
272
273 unsafe { externs::state::add_int64(ord, key.as_ptr(), key.len() as u32, value) }
274 }
275}
276
277#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
278pub fn add_float64<K: AsRef<str>>(ord: i64, key: K, value: f64) {
279 #[cfg(target_arch = "wasm32")]
280 {
281 let key = key.as_ref();
282
283 unsafe { externs::state::add_float64(ord, key.as_ptr(), key.len() as u32, value) }
284 }
285}
286
287#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
288pub fn add_bigdecimal<K, V>(ord: i64, key: K, value: V)
289where
290 K: AsRef<str>,
291 V: AsRef<BigDecimal>,
292{
293 #[cfg(target_arch = "wasm32")]
294 {
295 let key = key.as_ref();
296 let big_decimal = value.as_ref();
297 let data: String = big_decimal.into();
298
299 unsafe {
300 externs::state::add_bigdecimal(
301 ord,
302 key.as_ptr(),
303 key.len() as u32,
304 data.as_ptr(),
305 data.len() as u32,
306 )
307 }
308 }
309}
310
311#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
312pub fn set_min_int64<K: AsRef<str>>(ord: i64, key: K, value: i64) {
313 #[cfg(target_arch = "wasm32")]
314 {
315 let key = key.as_ref();
316
317 unsafe { externs::state::set_min_int64(ord, key.as_ptr(), key.len() as u32, value) }
318 }
319}
320
321#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
322pub fn set_min_bigint<K, V>(ord: i64, key: K, value: V)
323where
324 K: AsRef<str>,
325 V: AsRef<BigInt>,
326{
327 #[cfg(target_arch = "wasm32")]
328 {
329 let key = key.as_ref();
330 let big_int = value.as_ref();
331 let data: String = big_int.into();
332
333 unsafe {
334 externs::state::set_min_bigint(
335 ord,
336 key.as_ptr(),
337 key.len() as u32,
338 data.as_ptr(),
339 data.len() as u32,
340 )
341 }
342 }
343}
344
345#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
346pub fn set_min_float64<K: AsRef<str>>(ord: i64, key: K, value: f64) {
347 #[cfg(target_arch = "wasm32")]
348 {
349 let key = key.as_ref();
350
351 unsafe { externs::state::set_min_float64(ord, key.as_ptr(), key.len() as u32, value) }
352 }
353}
354
355#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
356pub fn set_min_bigdecimal<K, V>(ord: i64, key: K, value: V)
357where
358 K: AsRef<str>,
359 V: AsRef<BigDecimal>,
360{
361 #[cfg(target_arch = "wasm32")]
362 {
363 let key = key.as_ref();
364 let big_decimal = value.as_ref();
365 let data: String = big_decimal.into();
366
367 unsafe {
368 externs::state::set_min_bigdecimal(
369 ord,
370 key.as_ptr(),
371 key.len() as u32,
372 data.as_ptr(),
373 data.len() as u32,
374 )
375 }
376 }
377}
378
379#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
380pub fn set_max_int64<K: AsRef<str>>(ord: i64, key: K, value: i64) {
381 #[cfg(target_arch = "wasm32")]
382 {
383 let key = key.as_ref();
384
385 unsafe { externs::state::set_max_int64(ord, key.as_ptr(), key.len() as u32, value) }
386 }
387}
388
389#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
390pub fn set_max_bigint<K, V>(ord: i64, key: K, value: V)
391where
392 K: AsRef<str>,
393 V: AsRef<BigInt>,
394{
395 #[cfg(target_arch = "wasm32")]
396 {
397 let key = key.as_ref();
398 let big_int = value.as_ref();
399 let data: String = big_int.into();
400
401 unsafe {
402 externs::state::set_max_bigint(
403 ord,
404 key.as_ptr(),
405 key.len() as u32,
406 data.as_ptr(),
407 data.len() as u32,
408 )
409 }
410 }
411}
412
413#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
414pub fn set_max_float64<K: AsRef<str>>(ord: i64, key: K, value: f64) {
415 #[cfg(target_arch = "wasm32")]
416 {
417 let key = key.as_ref();
418
419 unsafe { externs::state::set_max_float64(ord, key.as_ptr(), key.len() as u32, value) }
420 }
421}
422
423#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
424pub fn set_max_bigdecimal<K, V>(ord: i64, key: K, value: V)
425where
426 K: AsRef<str>,
427 V: AsRef<BigDecimal>,
428{
429 #[cfg(target_arch = "wasm32")]
430 {
431 let key = key.as_ref();
432 let big_decimal = value.as_ref();
433 let data: String = big_decimal.into();
434
435 unsafe {
436 externs::state::set_max_bigdecimal(
437 ord,
438 key.as_ptr(),
439 key.len() as u32,
440 data.as_ptr(),
441 data.len() as u32,
442 )
443 }
444 }
445}
446
447#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
448pub fn set_sum_bigint<K, V>(ord: i64, key: K, value: V)
449where
450 K: AsRef<str>,
451 V: AsRef<str>,
452 String: From<V>,
453{
454 #[cfg(target_arch = "wasm32")]
455 {
456 let key = key.as_ref();
457 let data: String = value.into();
458
459 unsafe {
460 externs::state::set_sum_bigint(
461 ord,
462 key.as_ptr(),
463 key.len() as u32,
464 data.as_ptr(),
465 data.len() as u32,
466 )
467 }
468 }
469}
470
471#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
472pub fn set_sum_bigdecimal<K, V>(ord: i64, key: K, value: V)
473where
474 K: AsRef<str>,
475 V: AsRef<str>,
476 String: From<V>,
477{
478 #[cfg(target_arch = "wasm32")]
479 {
480 let key = key.as_ref();
481 let data: String = value.into();
482
483 unsafe {
484 externs::state::set_sum_bigdecimal(
485 ord,
486 key.as_ptr(),
487 key.len() as u32,
488 data.as_ptr(),
489 data.len() as u32,
490 )
491 }
492 }
493}
494
495#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
496pub fn set_sum_int64<K, V>(ord: i64, key: K, value: V)
497where
498 K: AsRef<str>,
499 V: AsRef<str>,
500 String: From<V>,
501{
502 #[cfg(target_arch = "wasm32")]
503 {
504 let key = key.as_ref();
505 let data: String = value.into();
506
507 unsafe {
508 externs::state::set_sum_int64(
509 ord,
510 key.as_ptr(),
511 key.len() as u32,
512 data.as_ptr(),
513 data.len() as u32,
514 )
515 }
516 }
517}
518
519#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
520pub fn set_sum_float64<K, V>(ord: i64, key: K, value: V)
521where
522 K: AsRef<str>,
523 V: AsRef<str>,
524 String: From<V>,
525{
526 #[cfg(target_arch = "wasm32")]
527 {
528 let key = key.as_ref();
529 let data: String = value.into();
530
531 unsafe {
532 externs::state::set_sum_float64(
533 ord,
534 key.as_ptr(),
535 key.len() as u32,
536 data.as_ptr(),
537 data.len() as u32,
538 )
539 }
540 }
541}