1#![no_std]
15
16#[macro_use]
17extern crate alloc;
18
19use core::convert::TryInto;
20
21pub use binary_codec_sv2::{self, Decodable as Deserialize, Encodable as Serialize, *};
22pub use derive_codec_sv2::{Decodable as Deserialize, Encodable as Serialize};
23
24pub fn clone_message<T: Serialize>(_: T) -> T {
26 todo!()
27}
28
29pub fn u256_from_int<V: Into<u64>>(value: V) -> U256<'static> {
31 let mut u256 = vec![0_u8; 24];
33 let val: u64 = value.into();
34 for v in &(val.to_le_bytes()) {
35 u256.push(*v)
37 }
38 let u256: U256 = u256.try_into().unwrap();
40 u256
41}
42
43#[cfg(test)]
44mod test {
45 use super::*;
46 use alloc::vec::Vec;
47
48 mod test_struct {
49 use super::*;
50 use core::convert::TryInto;
51
52 #[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
53 struct Test {
54 a: u32,
55 b: u8,
56 c: U24,
57 }
58
59 #[test]
60 fn test_struct() {
61 let expected = Test {
62 a: 456,
63 b: 9,
64 c: 67_u32.try_into().unwrap(),
65 };
66
67 let mut bytes = to_bytes(expected.clone()).unwrap();
68
69 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
70
71 assert_eq!(deserialized, expected);
72 }
73 }
74
75 mod test_f32 {
76 use super::*;
77 use core::convert::TryInto;
78
79 #[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
80 struct Test {
81 a: u8,
82 b: U24,
83 c: f32,
84 }
85
86 #[test]
87 fn test_struct() {
88 let expected = Test {
89 c: 0.345,
90 a: 9,
91 b: 67_u32.try_into().unwrap(),
92 };
93
94 let mut bytes = to_bytes(expected.clone()).unwrap();
95
96 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
97
98 assert_eq!(deserialized, expected);
99 }
100 }
101
102 mod test_b0255 {
103 use super::*;
104 use core::convert::TryInto;
105
106 #[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
107 struct Test<'decoder> {
108 a: B0255<'decoder>,
109 }
110
111 #[test]
112 fn test_b0255() {
113 let mut b0255 = [6; 3];
114 let b0255: B0255 = (&mut b0255[..]).try_into().unwrap();
115
116 let expected = Test { a: b0255 };
117
118 let mut bytes = to_bytes(expected.clone()).unwrap();
119
120 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
121
122 assert_eq!(deserialized, expected);
123 }
124
125 #[test]
126 fn test_b0255_max() {
127 let mut b0255 = [6; 255];
128 let b0255: B0255 = (&mut b0255[..]).try_into().unwrap();
129
130 let expected = Test { a: b0255 };
131
132 let mut bytes = to_bytes(expected.clone()).unwrap();
133
134 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
135
136 assert_eq!(deserialized, expected);
137 }
138 }
139
140 mod test_u256 {
141 use super::*;
142 use core::convert::TryInto;
143
144 #[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
145 struct Test<'decoder> {
146 a: U256<'decoder>,
147 }
148
149 #[test]
150 fn test_u256() {
151 let mut u256 = [6_u8; 32];
152 let u256: U256 = (&mut u256[..]).try_into().unwrap();
153
154 let expected = Test { a: u256 };
155
156 let mut bytes = to_bytes(expected.clone()).unwrap();
157
158 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
159
160 assert_eq!(deserialized, expected);
161 }
162 }
163
164 mod test_signature {
165 use super::*;
166 use core::convert::TryInto;
167
168 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
169 struct Test<'decoder> {
170 a: Signature<'decoder>,
171 }
172
173 #[test]
174 fn test_signature() {
175 let mut s = [6; 64];
176 let s: Signature = (&mut s[..]).try_into().unwrap();
177
178 let expected = Test { a: s };
179
180 let mut bytes = to_bytes(expected.clone()).unwrap();
181
182 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
183
184 assert_eq!(deserialized, expected);
185 }
186 }
187
188 mod test_b016m {
189 use super::*;
190 use core::convert::TryInto;
191
192 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
193 struct Test<'decoder> {
194 b: bool,
195 a: B016M<'decoder>,
196 }
197
198 #[test]
199 fn test_b016m() {
200 let mut b = [0_u8; 70000];
201 let b: B016M = (&mut b[..]).try_into().unwrap();
202 let expected = Test { a: b, b: true };
205
206 let mut bytes = to_bytes(expected.clone()).unwrap();
207
208 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
209
210 assert_eq!(deserialized, expected);
211 }
212
213 #[test]
214 fn test_b016m_max() {
215 let mut b = vec![0_u8; 16777215];
216 let b: B016M = (&mut b[..]).try_into().unwrap();
217 let expected = Test { a: b, b: true };
220
221 let mut bytes = to_bytes(expected.clone()).unwrap();
222
223 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
224
225 assert_eq!(deserialized, expected);
226 }
227 }
228
229 mod test_b064k {
230 use super::*;
231 use core::convert::TryInto;
232
233 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
234 struct Test<'decoder> {
235 b: bool,
236 a: B064K<'decoder>,
237 }
238
239 #[test]
240 fn test_b064k() {
241 let mut b = [1, 2, 9];
242 let b: B064K = (&mut b[..])
243 .try_into()
244 .expect("vector smaller than 64K should not fail");
245
246 let expected = Test { a: b, b: true };
247
248 let mut bytes = to_bytes(expected.clone()).unwrap();
249
250 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
251
252 assert_eq!(deserialized, expected);
253 }
254 }
255
256 mod test_seq0255_u256 {
257 use super::*;
258 use core::convert::TryInto;
259
260 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
261 struct Test<'decoder> {
262 a: Seq0255<'decoder, U256<'decoder>>,
263 }
264
265 #[test]
266 fn test_seq0255_u256() {
267 let mut u256_1 = [6; 32];
268 let mut u256_2 = [5; 32];
269 let mut u256_3 = [0; 32];
270 let u256_1: U256 = (&mut u256_1[..]).try_into().unwrap();
271 let u256_2: U256 = (&mut u256_2[..]).try_into().unwrap();
272 let u256_3: U256 = (&mut u256_3[..]).try_into().unwrap();
273
274 let val = vec![u256_1, u256_2, u256_3];
275 let s = Seq0255::new(val).unwrap();
276
277 let test = Test { a: s };
278
279 let mut bytes = to_bytes(test.clone()).unwrap();
280
281 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
282
283 let bytes_2 = to_bytes(deserialized.clone()).unwrap();
284
285 assert_eq!(bytes, bytes_2);
286 }
287 }
288
289 mod test_0255_bool {
290 use super::*;
291
292 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
293 struct Test<'decoder> {
294 a: Seq0255<'decoder, bool>,
295 }
296
297 #[test]
298 fn test_seq0255_bool() {
299 let s: Seq0255<bool> = Seq0255::new(vec![true, false, true]).unwrap();
300
301 let expected = Test { a: s };
302
303 let mut bytes = to_bytes(expected.clone()).unwrap();
304
305 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
306
307 assert_eq!(deserialized, expected);
308 }
309 }
310
311 mod test_seq0255_u16 {
312 use super::*;
313
314 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
315 struct Test<'decoder> {
316 a: Seq0255<'decoder, u16>,
317 }
318
319 #[test]
320 fn test_seq0255_u16() {
321 let s: Seq0255<u16> = Seq0255::new(vec![10, 43, 89]).unwrap();
322
323 let expected = Test { a: s };
324
325 let mut bytes = to_bytes(expected.clone()).unwrap();
326
327 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
328
329 assert_eq!(deserialized, expected);
330 }
331 }
332
333 mod test_seq_0255_u24 {
334 use super::*;
335 use core::convert::TryInto;
336
337 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
338 struct Test<'decoder> {
339 a: Seq0255<'decoder, U24>,
340 }
341
342 #[test]
343 fn test_seq0255_u24() {
344 let u24_1: U24 = 56_u32.try_into().unwrap();
345 let u24_2: U24 = 59_u32.try_into().unwrap();
346 let u24_3: U24 = 70999_u32.try_into().unwrap();
347
348 let val = vec![u24_1, u24_2, u24_3];
349 let s: Seq0255<U24> = Seq0255::new(val).unwrap();
350
351 let expected = Test { a: s };
352
353 let mut bytes = to_bytes(expected.clone()).unwrap();
354
355 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
356
357 assert_eq!(deserialized, expected);
358 }
359 }
360
361 mod test_seqo255_u32 {
362 use super::*;
363
364 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
365 struct Test<'decoder> {
366 a: Seq0255<'decoder, u32>,
367 }
368
369 #[test]
370 fn test_seq0255_u32() {
371 let s: Seq0255<u32> = Seq0255::new(vec![546, 99999, 87, 32]).unwrap();
372
373 let expected = Test { a: s };
374
375 let mut bytes = to_bytes(expected.clone()).unwrap();
376
377 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
378
379 assert_eq!(deserialized, expected);
380 }
381 }
382
383 mod test_seq0255_signature {
384 use super::*;
385 use core::convert::TryInto;
386
387 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
388 struct Test<'decoder> {
389 a: Seq0255<'decoder, Signature<'decoder>>,
390 }
391
392 #[test]
393 fn test_seq0255_signature() {
394 let mut siganture_1 = [88_u8; 64];
395 let mut siganture_2 = [99_u8; 64];
396 let mut siganture_3 = [220_u8; 64];
397 let siganture_1: Signature = (&mut siganture_1[..]).try_into().unwrap();
398 let siganture_2: Signature = (&mut siganture_2[..]).try_into().unwrap();
399 let siganture_3: Signature = (&mut siganture_3[..]).try_into().unwrap();
400
401 let val = vec![siganture_1, siganture_2, siganture_3];
402 let s: Seq0255<Signature> = Seq0255::new(val).unwrap();
403
404 let expected = Test { a: s };
405
406 let mut bytes = to_bytes(expected.clone()).unwrap();
407
408 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
409
410 assert_eq!(deserialized, expected);
411 }
412 }
413
414 mod test_seq_064_u256 {
415 use super::*;
416 use core::convert::TryInto;
417
418 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
419 struct Test<'decoder> {
420 a: Seq064K<'decoder, U256<'decoder>>,
421 }
422
423 #[test]
424 fn test_seq064k_u256() {
425 let mut u256_1 = [6; 32];
426 let mut u256_2 = [5; 32];
427 let mut u256_3 = [0; 32];
428 let u256_1: U256 = (&mut u256_1[..]).try_into().unwrap();
429 let u256_2: U256 = (&mut u256_2[..]).try_into().unwrap();
430 let u256_3: U256 = (&mut u256_3[..]).try_into().unwrap();
431
432 let val = vec![u256_1, u256_2, u256_3];
433 let s = Seq064K::new(val).unwrap();
434
435 let test = Test { a: s };
436
437 let mut bytes = to_bytes(test.clone()).unwrap();
438
439 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
440
441 let bytes_2 = to_bytes(deserialized.clone()).unwrap();
442
443 assert_eq!(bytes, bytes_2);
444 }
445 }
446
447 mod test_064_bool {
448 use super::*;
449
450 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
451 struct Test<'decoder> {
452 a: Seq064K<'decoder, bool>,
453 }
454
455 #[test]
456 fn test_seq064k_bool() {
457 let s: Seq064K<bool> = Seq064K::new(vec![true, false, true]).unwrap();
458 let s2: Seq064K<bool> = Seq064K::new(vec![true; 64000]).unwrap();
459
460 let expected = Test { a: s };
461 let expected2 = Test { a: s2 };
462
463 let mut bytes = to_bytes(expected.clone()).unwrap();
464 let mut bytes2 = to_bytes(expected2.clone()).unwrap();
465
466 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
467 let deserialized2: Test = from_bytes(&mut bytes2[..]).unwrap();
468
469 assert_eq!(deserialized, expected);
470 assert_eq!(deserialized2, expected2);
471 }
472 }
473
474 mod test_se1o64k_u16 {
475 use super::*;
476
477 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
478 struct Test<'decoder> {
479 a: Seq064K<'decoder, u16>,
480 }
481
482 #[test]
483 fn test_seq064k_u16() {
484 let s: Seq064K<u16> = Seq064K::new(vec![10, 43, 89]).unwrap();
485
486 let expected = Test { a: s };
487
488 let mut bytes = to_bytes(expected.clone()).unwrap();
489
490 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
491
492 assert_eq!(deserialized, expected);
493 }
494 }
495
496 mod test_seq064k_u24 {
497 use super::*;
498 use core::convert::TryInto;
499
500 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
501 struct Test<'decoder> {
502 a: Seq064K<'decoder, U24>,
503 }
504
505 #[test]
506 fn test_seq064k_u24() {
507 let u24_1: U24 = 56_u32.try_into().unwrap();
508 let u24_2: U24 = 59_u32.try_into().unwrap();
509 let u24_3: U24 = 70999_u32.try_into().unwrap();
510
511 let val = vec![u24_1, u24_2, u24_3];
512 let s: Seq064K<U24> = Seq064K::new(val).unwrap();
513
514 let expected = Test { a: s };
515
516 let mut bytes = to_bytes(expected.clone()).unwrap();
517
518 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
519
520 assert_eq!(deserialized, expected);
521 }
522 }
523
524 mod test_seq064k_u32 {
525 use super::*;
526
527 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
528 struct Test<'decoder> {
529 a: Seq064K<'decoder, u32>,
530 }
531
532 #[test]
533 fn test_seq064k_u32() {
534 let s: Seq064K<u32> = Seq064K::new(vec![546, 99999, 87, 32]).unwrap();
535
536 let expected = Test { a: s };
537
538 let mut bytes = to_bytes(expected.clone()).unwrap();
539
540 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
541
542 assert_eq!(deserialized, expected);
543 }
544 }
545 mod test_seq064k_signature {
546 use super::*;
547 use core::convert::TryInto;
548
549 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
550 struct Test<'decoder> {
551 a: Seq064K<'decoder, Signature<'decoder>>,
552 }
553
554 #[test]
555 fn test_seq064k_signature() {
556 let mut siganture_1 = [88_u8; 64];
557 let mut siganture_2 = [99_u8; 64];
558 let mut siganture_3 = [220_u8; 64];
559 let siganture_1: Signature = (&mut siganture_1[..]).try_into().unwrap();
560 let siganture_2: Signature = (&mut siganture_2[..]).try_into().unwrap();
561 let siganture_3: Signature = (&mut siganture_3[..]).try_into().unwrap();
562
563 let val = vec![siganture_1, siganture_2, siganture_3];
564 let s: Seq064K<Signature> = Seq064K::new(val).unwrap();
565
566 let expected = Test { a: s };
567
568 let mut bytes = to_bytes(expected.clone()).unwrap();
569
570 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
571
572 assert_eq!(deserialized, expected);
573 }
574 }
575 mod test_seq064k_b016m {
576 use super::*;
577 use core::convert::TryInto;
578
579 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
580 struct Test<'decoder> {
581 a: Seq064K<'decoder, B016M<'decoder>>,
582 }
583
584 #[test]
585 fn test_seq064k_b016m() {
586 let mut bytes_1 = [88_u8; 64];
587 let mut bytes_2 = [99_u8; 64];
588 let mut bytes_3 = [220_u8; 64];
589 let bytes_1: B016M = (&mut bytes_1[..]).try_into().unwrap();
590 let bytes_2: B016M = (&mut bytes_2[..]).try_into().unwrap();
591 let bytes_3: B016M = (&mut bytes_3[..]).try_into().unwrap();
592
593 let val = vec![bytes_1, bytes_2, bytes_3];
594 let s: Seq064K<B016M> = Seq064K::new(val).unwrap();
595
596 let expected = Test { a: s };
597
598 let mut bytes = to_bytes(expected.clone()).unwrap();
599
600 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
601
602 assert_eq!(deserialized, expected);
603 }
604 }
605 mod test_seq_0255_in_struct {
606 use super::*;
607
608 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
609 struct Test<'decoder> {
610 a: u8,
611 b: Seq0255<'decoder, u8>,
612 c: u32,
613 }
614
615 #[test]
616 fn test_seq_0255_in_struct() {
617 let expected = Test {
618 a: 89,
619 b: Seq0255::new(vec![]).unwrap(),
620 c: 32,
621 };
622 let len = expected.get_size();
623 let mut buffer = Vec::new();
624 buffer.resize(len, 0);
625 to_writer(expected.clone(), &mut buffer).unwrap();
626 let deserialized: Test = from_bytes(&mut buffer[..]).unwrap();
627 assert_eq!(deserialized, expected);
628 }
629 }
630 mod test_sv2_option_u256 {
631 use super::*;
632 use core::convert::TryInto;
633
634 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
635 struct Test<'decoder> {
636 a: Sv2Option<'decoder, U256<'decoder>>,
637 }
638
639 #[test]
640 fn test_sv2_option_u256() {
641 let mut u256_1 = [6; 32];
642 let u256_1: U256 = (&mut u256_1[..]).try_into().unwrap();
643
644 let val = Some(u256_1);
645 let s = Sv2Option::new(val);
646
647 let test = Test { a: s };
648
649 let mut bytes = to_bytes(test.clone()).unwrap();
650
651 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
652
653 let bytes_2 = to_bytes(deserialized.clone()).unwrap();
654
655 assert_eq!(bytes, bytes_2);
656 }
657 }
658 mod test_sv2_option_none {
659 use super::*;
660
661 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
662 struct Test<'decoder> {
663 a: Sv2Option<'decoder, U256<'decoder>>,
664 }
665
666 #[test]
667 fn test_sv2_option_none() {
668 let val = None;
669 let s = Sv2Option::new(val);
670
671 let test = Test { a: s };
672
673 let mut bytes = to_bytes(test.clone()).unwrap();
674
675 let deserialized: Test = from_bytes(&mut bytes[..]).unwrap();
676
677 let bytes_2 = to_bytes(deserialized.clone()).unwrap();
678
679 assert_eq!(bytes, bytes_2);
680 }
681 }
682}