rust_storage_interface_library/
lib.rs1pub mod ssvm_storage {
18
19 pub mod ssvm_native {
20 use std::os::raw::c_char;
21
22 #[link(wasm_import_module = "ssvm_native")]
23 extern "C" {
24 pub fn ssvm_storage_createUUID(new_CString_key: *mut c_char);
25 pub fn ssvm_storage_beginStoreTx(new_CString_key: *const c_char);
26 pub fn ssvm_storage_beginLoadTx(new_CString_key: *const c_char);
27 pub fn ssvm_storage_storeI32(_i32_value: i32);
28 pub fn ssvm_storage_loadI32() -> i32;
29 pub fn ssvm_storage_endStoreTx();
30 pub fn ssvm_storage_endLoadTx();
31 }
32 }
33
34 pub mod load {
35 use super::ssvm_native;
36 use bincode;
37 use serialize_deserialize_u8_i32::s_d_u8_i32;
38 use std::char;
39 use std::ffi::CString;
40 use std::str;
41
42 pub fn deserialize_vec_i32_to_unknown<'de, T: serde::de::DeserializeOwned>(
43 _value: Vec<i32>,
44 _t: T,
45 ) -> T {
46 let deserialized_to_u8: Vec<u8> = s_d_u8_i32::deserialize_i32_to_u8(_value);
47 let deserialized_to_unknown: T = bincode::deserialize(&deserialized_to_u8[..]).unwrap();
48 deserialized_to_unknown
49 }
50 pub fn load_as_struct<T: for<'de> serde::de::Deserialize<'de>>(
51 _string_key: &str,
52 _t: T,
53 ) -> T {
54 let mut struct_vec = Vec::new();
55 let var_c_string = CString::new(_string_key).expect("CString::new failed");
57 let ptr_c_string = var_c_string.into_raw();
58 unsafe {
60 ssvm_native::ssvm_storage_beginLoadTx(ptr_c_string);
62 let number_of_i32s: i32 = ssvm_native::ssvm_storage_loadI32();
64 for _i in 0..number_of_i32s {
65 struct_vec.push(ssvm_native::ssvm_storage_loadI32());
66 }
67 let the_struct: T = deserialize_vec_i32_to_unknown(struct_vec, _t);
68 ssvm_native::ssvm_storage_endLoadTx();
69 let var_pointer_released = CString::from_raw(ptr_c_string);
71 return the_struct;
73 }
74 }
75 pub fn deserialize_vec_i32_to_bool(_value: Vec<i32>) -> bool {
76 let deserialized_to_u8: Vec<u8> = s_d_u8_i32::deserialize_i32_to_u8(_value);
77 let deserialized_to_boolean: bool =
78 bincode::deserialize(&deserialized_to_u8[..]).unwrap();
79 deserialized_to_boolean
80 }
81 pub fn load_as_bool(_string_key: &str) -> bool {
82 let mut bool_vec = Vec::new();
83 let var_c_string = CString::new(_string_key).expect("CString::new failed");
85 let ptr_c_string = var_c_string.into_raw();
86 unsafe {
88 ssvm_native::ssvm_storage_beginLoadTx(ptr_c_string);
90 let number_of_i32s: i32 = ssvm_native::ssvm_storage_loadI32();
92 for _i in 0..number_of_i32s {
93 bool_vec.push(ssvm_native::ssvm_storage_loadI32());
94 }
95 let boolean: bool = deserialize_vec_i32_to_bool(bool_vec);
96 ssvm_native::ssvm_storage_endLoadTx();
97 let var_pointer_released = CString::from_raw(ptr_c_string);
99 return boolean;
101 }
102 }
103 pub fn deserialize_vec_i32_to_char(_value: Vec<i32>) -> char {
104 let deserialized_to_u8: Vec<u8> = s_d_u8_i32::deserialize_i32_to_u8(_value);
105 let deserialized_to_char: char = bincode::deserialize(&deserialized_to_u8[..]).unwrap();
106 deserialized_to_char
107 }
108 pub fn load_as_char(_string_key: &str) -> char {
109 let mut char_vec = Vec::new();
110 let var_c_string = CString::new(_string_key).expect("CString::new failed");
112 let ptr_c_string = var_c_string.into_raw();
113 unsafe {
115 ssvm_native::ssvm_storage_beginLoadTx(ptr_c_string);
117 let number_of_chars: i32 = ssvm_native::ssvm_storage_loadI32();
119 for _i in 0..number_of_chars {
120 char_vec.push(ssvm_native::ssvm_storage_loadI32());
121 }
122 let character: char = deserialize_vec_i32_to_char(char_vec);
123 ssvm_native::ssvm_storage_endLoadTx();
124 let var_pointer_released = CString::from_raw(ptr_c_string);
126 return character;
128 }
129 }
130 pub fn deserialize_vec_i32_to_i8(_value: Vec<i32>) -> i8 {
131 let deserialized_to_u8: Vec<u8> = s_d_u8_i32::deserialize_i32_to_u8(_value);
132 let deserialized_to_i8: i8 = bincode::deserialize(&deserialized_to_u8[..]).unwrap();
133 deserialized_to_i8
134 }
135 pub fn load_as_i8(_string_key: &str) -> i8 {
136 let mut i8_vec = Vec::new();
137 let var_c_string = CString::new(_string_key).expect("CString::new failed");
139 let ptr_c_string = var_c_string.into_raw();
140 unsafe {
142 ssvm_native::ssvm_storage_beginLoadTx(ptr_c_string);
144 let number_of_i32s: i32 = ssvm_native::ssvm_storage_loadI32();
146 for _i in 0..number_of_i32s {
147 i8_vec.push(ssvm_native::ssvm_storage_loadI32());
148 }
149 let i8_value: i8 = deserialize_vec_i32_to_i8(i8_vec);
150 ssvm_native::ssvm_storage_endLoadTx();
151 let var_pointer_released = CString::from_raw(ptr_c_string);
153 return i8_value;
155 }
156 }
157 pub fn deserialize_vec_i32_to_i16(_value: Vec<i32>) -> i16 {
158 let deserialized_to_u8: Vec<u8> = s_d_u8_i32::deserialize_i32_to_u8(_value);
159 let deserialized_to_i16: i16 = bincode::deserialize(&deserialized_to_u8[..]).unwrap();
160 deserialized_to_i16
161 }
162 pub fn load_as_i16(_string_key: &str) -> i16 {
163 let mut i16_vec = Vec::new();
164 let var_c_string = CString::new(_string_key).expect("CString::new failed");
166 let ptr_c_string = var_c_string.into_raw();
167 unsafe {
169 ssvm_native::ssvm_storage_beginLoadTx(ptr_c_string);
171 let number_of_i32s: i32 = ssvm_native::ssvm_storage_loadI32();
173 for _i in 0..number_of_i32s {
174 i16_vec.push(ssvm_native::ssvm_storage_loadI32());
175 }
176 let i16_value: i16 = deserialize_vec_i32_to_i16(i16_vec);
177 ssvm_native::ssvm_storage_endLoadTx();
178 let var_pointer_released = CString::from_raw(ptr_c_string);
180 return i16_value;
182 }
183 }
184 pub fn deserialize_vec_i32_to_i32(_value: Vec<i32>) -> i32 {
185 let deserialized_to_u8: Vec<u8> = s_d_u8_i32::deserialize_i32_to_u8(_value);
186 let deserialized_to_i32: i32 = bincode::deserialize(&deserialized_to_u8[..]).unwrap();
187 deserialized_to_i32
188 }
189 pub fn load_as_i32(_string_key: &str) -> i32 {
190 let mut i32_vec = Vec::new();
191 let var_c_string = CString::new(_string_key).expect("CString::new failed");
193 let ptr_c_string = var_c_string.into_raw();
194 unsafe {
196 ssvm_native::ssvm_storage_beginLoadTx(ptr_c_string);
198 let number_of_i32s: i32 = ssvm_native::ssvm_storage_loadI32();
200 for _i in 0..number_of_i32s {
201 i32_vec.push(ssvm_native::ssvm_storage_loadI32());
202 }
203 let i32_value: i32 = deserialize_vec_i32_to_i32(i32_vec);
204 ssvm_native::ssvm_storage_endLoadTx();
205 let var_pointer_released = CString::from_raw(ptr_c_string);
207 return i32_value;
209 }
210 }
211 pub fn deserialize_vec_i32_to_i64(_value: Vec<i32>) -> i64 {
212 let deserialized_to_u8: Vec<u8> = s_d_u8_i32::deserialize_i32_to_u8(_value);
213 let deserialized_to_i64: i64 = bincode::deserialize(&deserialized_to_u8[..]).unwrap();
214 deserialized_to_i64
215 }
216 pub fn load_as_i64(_string_key: &str) -> i64 {
217 let mut i64_vec = Vec::new();
218 let var_c_string = CString::new(_string_key).expect("CString::new failed");
220 let ptr_c_string = var_c_string.into_raw();
221 unsafe {
223 ssvm_native::ssvm_storage_beginLoadTx(ptr_c_string);
225 let number_of_i32s: i32 = ssvm_native::ssvm_storage_loadI32();
227 for _i in 0..number_of_i32s {
228 i64_vec.push(ssvm_native::ssvm_storage_loadI32());
229 }
230 let i64_value: i64 = deserialize_vec_i32_to_i64(i64_vec);
231 ssvm_native::ssvm_storage_endLoadTx();
232 let var_pointer_released = CString::from_raw(ptr_c_string);
234 return i64_value;
236 }
237 }
238 pub fn deserialize_vec_i32_to_u8(_value: Vec<i32>) -> u8 {
239 let deserialized_to_u8: Vec<u8> = s_d_u8_i32::deserialize_i32_to_u8(_value);
240 let deserialized_to_u8: u8 = bincode::deserialize(&deserialized_to_u8[..]).unwrap();
241 deserialized_to_u8
242 }
243 pub fn load_as_u8(_string_key: &str) -> u8 {
244 let mut u8_vec = Vec::new();
245 let var_c_string = CString::new(_string_key).expect("CString::new failed");
247 let ptr_c_string = var_c_string.into_raw();
248 unsafe {
250 ssvm_native::ssvm_storage_beginLoadTx(ptr_c_string);
252 let number_of_i32s: i32 = ssvm_native::ssvm_storage_loadI32();
254 for _i in 0..number_of_i32s {
255 u8_vec.push(ssvm_native::ssvm_storage_loadI32());
256 }
257 let u8_value: u8 = deserialize_vec_i32_to_u8(u8_vec);
258 ssvm_native::ssvm_storage_endLoadTx();
259 let var_pointer_released = CString::from_raw(ptr_c_string);
261 return u8_value;
263 }
264 }
265 pub fn deserialize_vec_i32_to_string(_value: Vec<i32>) -> String{
266 let deserialized_to_u8: Vec<u8> = s_d_u8_i32::deserialize_i32_to_u8(_value);
267 let deserialized_to_string: String = bincode::deserialize(&deserialized_to_u8[..]).unwrap();
268 deserialized_to_string
269 }
270 pub fn load_as_string(_string_key: &str) -> String {
271 let mut retrieved_vec = Vec::new();
272 let var_c_string = CString::new(_string_key).expect("CString::new failed");
274 let ptr_c_string = var_c_string.into_raw();
275 unsafe {
277 ssvm_native::ssvm_storage_beginLoadTx(ptr_c_string);
279 let number_of_i32s: i32 = ssvm_native::ssvm_storage_loadI32();
281 for _i in 0..number_of_i32s {
283 retrieved_vec.push(ssvm_native::ssvm_storage_loadI32());
284 }
285 println!{"Deserialize i32 Vec: {:?}", retrieved_vec};
286 let the_string = deserialize_vec_i32_to_string(retrieved_vec);
288 ssvm_native::ssvm_storage_endLoadTx();
290 let var_pointer_released = CString::from_raw(ptr_c_string);
292 the_string
294 }
295 }
296 pub fn load_as_i32_vector(_string_key: &str) -> Vec<i32> {
297 let var_c_string = CString::new(_string_key).expect("CString::new failed");
299 let ptr_c_string = var_c_string.into_raw();
300 unsafe {
302 let mut i32_vector = Vec::new();
303 ssvm_native::ssvm_storage_beginLoadTx(ptr_c_string);
305 let number_of_items: i32 = ssvm_native::ssvm_storage_loadI32();
307 for _i in 0..number_of_items {
308 let single_i32: i32 = ssvm_native::ssvm_storage_loadI32();
309 i32_vector.push(single_i32);
310 }
311 ssvm_native::ssvm_storage_endLoadTx();
312 let var_pointer_released = CString::from_raw(ptr_c_string);
314 i32_vector
316 }
317 }
318 }
319
320 pub mod store {
321 use super::ssvm_native;
322 use bincode;
323 use serialize_deserialize_u8_i32::s_d_u8_i32;
324 use std::any::type_name;
325 use std::convert::TryInto;
326 use std::ffi::CString;
327
328 pub fn type_of<T>(_: T) -> &'static str {
329 type_name::<T>()
330 }
331
332 pub fn serialize_unknown_to_vec_i32<V: std::clone::Clone + serde::ser::Serialize>(
333 v: V,
334 ) -> Vec<i32> {
335 let encoded_as_u8: Vec<u8> = bincode::serialize(&v).unwrap();
336 println!("Store - orig data is now encoded to u8: {:?}", encoded_as_u8);
337 let encoded_as_i32: Vec<i32> = s_d_u8_i32::serialize_u8_to_i32(encoded_as_u8);
338 println!("Store - u8 data is now encoded to i32: {:?}", encoded_as_i32);
339 encoded_as_i32
340 }
341 pub fn store<V: std::clone::Clone + serde::ser::Serialize>(v: V) -> String {
360 let encoded_as_i32: Vec<i32> = serialize_unknown_to_vec_i32(&v);
364 let var_c_string = CString::new("placeholder-32bytes-aaaaaaaaaaaa").expect("Error: The CString::new constructor has failed");
366 let ptr_c_string = var_c_string.into_raw();
368 unsafe { ssvm_native::ssvm_storage_createUUID(ptr_c_string) }
370 let var_c_string_2: CString= unsafe { CString::from_raw(ptr_c_string) };
372 let ptr_c_string_2 = var_c_string_2.into_raw();
374 unsafe {
376 ssvm_native::ssvm_storage_beginStoreTx(ptr_c_string_2);
377 }
378 let var_c_string_3: CString = unsafe { CString::from_raw(ptr_c_string_2) };
379 unsafe {
381 ssvm_native::ssvm_storage_storeI32(encoded_as_i32.len().try_into().unwrap());
382 }
383 unsafe {
385 for i in encoded_as_i32.iter() {
386 ssvm_native::ssvm_storage_storeI32(*i);
387 }
388 }
389 unsafe {
391 ssvm_native::ssvm_storage_endStoreTx();
392 }
393 var_c_string_3.to_str().unwrap().to_string()
394 }
395
396 pub fn store_as_i32_vector(i32_vector: Vec<i32>) -> String {
399 let var_c_string = CString::new("placeholder")
402 .expect("Error: The CString::new constructor has failed");
403 let ptr_c_string = var_c_string.into_raw();
405 unsafe { ssvm_native::ssvm_storage_createUUID(ptr_c_string) }
407 let var_c_string_2: CString = unsafe { CString::from_raw(ptr_c_string) };
409 let ptr_c_string_2 = var_c_string_2.into_raw();
411 unsafe {
413 ssvm_native::ssvm_storage_beginStoreTx(ptr_c_string_2);
414 }
415 let var_c_string_3: CString = unsafe { CString::from_raw(ptr_c_string_2) };
417 unsafe {
419 ssvm_native::ssvm_storage_storeI32(i32_vector.len().try_into().unwrap());
420 }
421 unsafe {
423 for i in i32_vector.iter() {
424 ssvm_native::ssvm_storage_storeI32(*i);
425 }
426 }
427 unsafe {
429 ssvm_native::ssvm_storage_endStoreTx();
430 }
431 var_c_string_3.to_str().unwrap().to_string()
432 }
433
434 pub fn update<V: std::clone::Clone + serde::ser::Serialize>(_string_key: &str, v: V){
435 let var_c_string = CString::new(_string_key).expect("CString::new failed");
437 let ptr_c_string = var_c_string.into_raw();
439 let encoded_as_i32: Vec<i32> = serialize_unknown_to_vec_i32(&v);
441 unsafe {
443 ssvm_native::ssvm_storage_beginStoreTx(ptr_c_string);
444 }
445 let var_c_string_2: CString = unsafe { CString::from_raw(ptr_c_string) };
446 unsafe {
448 ssvm_native::ssvm_storage_storeI32(encoded_as_i32.len().try_into().unwrap());
449 }
450 unsafe {
452 for i in encoded_as_i32.iter() {
453 ssvm_native::ssvm_storage_storeI32(*i);
454 }
455 }
456 unsafe {
458 ssvm_native::ssvm_storage_endStoreTx();
459 }
460 }
461
462 pub fn update_as_i32_vector(_string_key: &str, i32_vector: Vec<i32>){
465 let var_c_string = CString::new(_string_key).expect("CString::new failed");
467 let ptr_c_string = var_c_string.into_raw();
469 unsafe {
471 ssvm_native::ssvm_storage_beginStoreTx(ptr_c_string);
472 }
473 let var_c_string_2: CString = unsafe { CString::from_raw(ptr_c_string) };
474 unsafe {
476 ssvm_native::ssvm_storage_storeI32(i32_vector.len().try_into().unwrap());
477 }
478 unsafe {
480 for i in i32_vector.iter() {
481 ssvm_native::ssvm_storage_storeI32(*i);
482 }
483 }
484 unsafe {
486 ssvm_native::ssvm_storage_endStoreTx();
487 }
488 }
489 }
490}
491
492#[cfg(test)]
497mod tests {
498 use super::ssvm_storage;
499 use serde::{Deserialize, Serialize};
500 #[derive(Serialize, Deserialize, PartialEq, Debug, Default)]
502 struct TestStruct {
503 a_vec: Vec<u8>,
504 a_i32: i32,
505 a_u8: u8,
506 a_bool: bool,
507 }
508 #[test]
509 fn test_store_as_struct() {
510 let test_struct1 = TestStruct {
511 a_vec: vec![134, 122, 131],
512 a_i32: 4,
513 a_u8: 4,
514 a_bool: true,
515 };
516 let _encoded_as_i32: Vec<i32> =
517 ssvm_storage::store::serialize_unknown_to_vec_i32(&test_struct1);
518 println!("Encoded as Vec<i32>: {:?}", test_struct1);
519 assert_eq!(
520 ssvm_storage::store::type_of(test_struct1),
521 "rust_storage_interface_library::tests::TestStruct"
522 );
523 }
524 #[test]
525 fn test_load_as_struct() {
526 let test_struct1 = TestStruct {
527 a_vec: vec![134, 122, 131],
528 a_i32: 4,
529 a_u8: 4,
530 a_bool: true,
531 };
532 let encoded_as_i32: Vec<i32> =
533 ssvm_storage::store::serialize_unknown_to_vec_i32(&test_struct1);
534 println!("Encoded as Vec<i32>: {:?}", encoded_as_i32);
535 let test_struct2 = TestStruct::default();
536 let test_struct3 =
537 ssvm_storage::load::deserialize_vec_i32_to_unknown(encoded_as_i32, test_struct2);
538 println!("Decoded as unknown: {:?}", test_struct3);
539 assert_eq!(test_struct3.a_vec[0], 134);
540 assert_eq!(test_struct3.a_i32, 4);
541 assert_eq!(test_struct3.a_u8, 4);
542 assert_eq!(test_struct3.a_bool, true);
543 }
544 #[test]
545 fn test_store_as_bool() {
546 let boolean1: bool = true;
547 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&boolean1);
548 println!("Encoded as Vec<i32>: {:?}", encoded_as_i32);
549 assert_eq!(boolean1, true);
550 assert_eq!(ssvm_storage::store::type_of(boolean1), "bool");
551 assert_eq!(encoded_as_i32.len(), 1);
552 assert_eq!(encoded_as_i32[0], 1);
553 }
554 #[test]
555 fn test_load_as_boolean() {
556 let boolean1: bool = true;
557 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&boolean1);
558 println!("Encoded as Vec<i32>: {:?}", encoded_as_i32);
559 let boolean2 = ssvm_storage::load::deserialize_vec_i32_to_bool(encoded_as_i32);
560 println!("Decoded as boolean: {:?}", boolean2);
561 assert_eq!(boolean2, true);
562 }
563 #[test]
564 fn test_store_as_char() {
565 let character1: char = 'a';
566 let encoded_as_i32: Vec<i32> =
567 ssvm_storage::store::serialize_unknown_to_vec_i32(&character1);
568 println!("Encoded as Vec<i32>: {:?}", encoded_as_i32);
569 assert_eq!(character1, 'a');
570 assert_eq!(ssvm_storage::store::type_of(character1), "char");
571 assert_eq!(encoded_as_i32.len(), 1);
572 assert_eq!(encoded_as_i32[0], 97);
573 }
574 #[test]
575 fn test_load_as_character() {
576 let character1: char = 'a';
577 let encoded_as_i32: Vec<i32> =
578 ssvm_storage::store::serialize_unknown_to_vec_i32(&character1);
579 println!("Encoded as Vec<i32>: {:?}", encoded_as_i32);
580 let character2 = ssvm_storage::load::deserialize_vec_i32_to_char(encoded_as_i32);
581 println!("Decoded as character: {:?}", character2);
582 assert_eq!(character2, 'a');
583 }
584 #[test]
585 fn test_store_as_i8() {
586 let i81: i8 = -2;
587 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&i81);
588 println!("Encoded as Vec<i32>: {:?}", encoded_as_i32);
589 assert_eq!(i81, -2);
590 assert_eq!(ssvm_storage::store::type_of(i81), "i8");
591 assert_eq!(encoded_as_i32.len(), 1);
592 assert_eq!(encoded_as_i32[0], 254);
593 }
594 #[test]
595 fn test_load_as_i8() {
596 let i81: i8 = -2;
597 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&i81);
598 println!("Encoded as Vec<i32>: {:?}", encoded_as_i32);
599 let i82 = ssvm_storage::load::deserialize_vec_i32_to_i8(encoded_as_i32);
600 println!("Decoded as i8: {:?}", i82);
601 assert_eq!(i82, -2);
602 }
603 #[test]
604 fn test_store_as_i16() {
605 let i161: i16 = -2;
606 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&i161);
607 println!("Encoded as Vec<i32>: {:?}", encoded_as_i32);
608 assert_eq!(i161, -2);
609 assert_eq!(ssvm_storage::store::type_of(i161), "i16");
610 assert_eq!(encoded_as_i32.len(), 1);
611 assert_eq!(encoded_as_i32[0], 2000254255);
612 }
613 #[test]
614 fn test_load_as_i16() {
615 let i161: i16 = -2;
616 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&i161);
617 println!("Encoded as Vec<i32>: {:?}", encoded_as_i32);
618 let i162 = ssvm_storage::load::deserialize_vec_i32_to_i16(encoded_as_i32);
619 println!("Decoded as i16: {:?}", i162);
620 assert_eq!(i162, -2);
621 }
622 #[test]
623 fn test_store_as_i32() {
624 let i321: i32 = 1234567890;
625 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&i321);
626 println!("Encoded as Vec<i32>: {:?}", encoded_as_i32);
627 assert_eq!(i321, 1234567890);
628 assert_eq!(ssvm_storage::store::type_of(i321), "i32");
629 assert_eq!(encoded_as_i32.len(), 2);
630 assert_eq!(encoded_as_i32[0], 1210002150);
631 assert_eq!(encoded_as_i32[1], 73);
632 }
633 #[test]
634 fn test_load_as_i32() {
635 let i321: i32 = 1234567890;
636 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&i321);
637 println!("I32 - Encoded as Vec<i32>: {:?}", encoded_as_i32);
638 let i322 = ssvm_storage::load::deserialize_vec_i32_to_i32(encoded_as_i32);
639 println!("Decoded as i32: {:?}", i322);
640 assert_eq!(i322, 1234567890);
641 }
642 #[test]
643 fn test_store_as_i64() {
644 let i641: i64 = 9223372036854775807;
645 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&i641);
646 println!("I64 - Encoded as Vec<i32>: {:?}", encoded_as_i32);
647 assert_eq!(i641, 9223372036854775807);
648 assert_eq!(ssvm_storage::store::type_of(i641), "i64");
649 assert_eq!(encoded_as_i32.len(), 3);
650 assert_eq!(encoded_as_i32[0], 1255255255);
651 assert_eq!(encoded_as_i32[1], 1255255255);
652 assert_eq!(encoded_as_i32[2], 2000255127);
653 }
654 #[test]
655 fn test_load_as_i64() {
656 let i641: i64 = 9223372036854775807;
657 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&i641);
658 println!("I64 - Encoded as Vec<i32>: {:?}", encoded_as_i32);
659 let i642 = ssvm_storage::load::deserialize_vec_i32_to_i64(encoded_as_i32);
660 println!("Decoded as i64: {:?}", i642);
661 assert_eq!(i642, 9223372036854775807);
662 }
663 #[test]
664 fn test_store_as_u8() {
665 let u81: u8 = 100;
666 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&u81);
667 println!("I64 - Encoded as Vec<i32>: {:?}", encoded_as_i32);
668 assert_eq!(u81, 100);
669 assert_eq!(ssvm_storage::store::type_of(u81), "u8");
670 assert_eq!(encoded_as_i32.len(), 1);
671 assert_eq!(encoded_as_i32[0], 100);
672 }
673 #[test]
674 fn test_load_as_u8() {
675 let u81: u8 = 100;
676 let encoded_as_i32: Vec<i32> = ssvm_storage::store::serialize_unknown_to_vec_i32(&u81);
677 println!("I64 - Encoded as Vec<i32>: {:?}", encoded_as_i32);
678 let u82 = ssvm_storage::load::deserialize_vec_i32_to_u8(encoded_as_i32);
679 println!("Decoded as u8: {:?}", u82);
680 assert_eq!(u82, 100);
681 }
682}