1use crate::reader::Reader;
4use crate::varint::{decode_length, encode_length};
5use crate::writer::Writer;
6use crate::Result;
7
8pub trait Encode {
10 fn encode(&self, writer: &mut Writer) -> Result<()>;
12}
13
14pub trait Decode: Sized {
16 fn decode(reader: &mut Reader) -> Result<Self>;
18}
19
20impl Encode for u8 {
23 fn encode(&self, writer: &mut Writer) -> Result<()> {
24 writer.write_u8(*self)
25 }
26}
27
28impl Decode for u8 {
29 fn decode(reader: &mut Reader) -> Result<Self> {
30 reader.read_u8()
31 }
32}
33
34impl Encode for u16 {
35 fn encode(&self, writer: &mut Writer) -> Result<()> {
36 writer.write_u16(*self)
37 }
38}
39
40impl Decode for u16 {
41 fn decode(reader: &mut Reader) -> Result<Self> {
42 reader.read_u16()
43 }
44}
45
46impl Encode for u32 {
47 fn encode(&self, writer: &mut Writer) -> Result<()> {
48 writer.write_u32(*self)
49 }
50}
51
52impl Decode for u32 {
53 fn decode(reader: &mut Reader) -> Result<Self> {
54 reader.read_u32()
55 }
56}
57
58impl Encode for u64 {
59 fn encode(&self, writer: &mut Writer) -> Result<()> {
60 writer.write_u64(*self)
61 }
62}
63
64impl Decode for u64 {
65 fn decode(reader: &mut Reader) -> Result<Self> {
66 reader.read_u64()
67 }
68}
69
70impl Encode for usize {
71 fn encode(&self, writer: &mut Writer) -> Result<()> {
72 writer.write_u64(*self as u64)
73 }
74}
75
76impl Decode for usize {
77 fn decode(reader: &mut Reader) -> Result<Self> {
78 Ok(reader.read_u64()? as usize)
79 }
80}
81
82impl Encode for i8 {
83 fn encode(&self, writer: &mut Writer) -> Result<()> {
84 writer.write_i8(*self)
85 }
86}
87
88impl Decode for i8 {
89 fn decode(reader: &mut Reader) -> Result<Self> {
90 reader.read_i8()
91 }
92}
93
94impl Encode for i16 {
95 fn encode(&self, writer: &mut Writer) -> Result<()> {
96 writer.write_i16(*self)
97 }
98}
99
100impl Decode for i16 {
101 fn decode(reader: &mut Reader) -> Result<Self> {
102 reader.read_i16()
103 }
104}
105
106impl Encode for i32 {
107 fn encode(&self, writer: &mut Writer) -> Result<()> {
108 writer.write_i32(*self)
109 }
110}
111
112impl Decode for i32 {
113 fn decode(reader: &mut Reader) -> Result<Self> {
114 reader.read_i32()
115 }
116}
117
118impl Encode for i64 {
119 fn encode(&self, writer: &mut Writer) -> Result<()> {
120 writer.write_i64(*self)
121 }
122}
123
124impl Decode for i64 {
125 fn decode(reader: &mut Reader) -> Result<Self> {
126 reader.read_i64()
127 }
128}
129
130impl Encode for f32 {
131 fn encode(&self, writer: &mut Writer) -> Result<()> {
132 writer.write_f32(*self)
133 }
134}
135
136impl Decode for f32 {
137 fn decode(reader: &mut Reader) -> Result<Self> {
138 reader.read_f32()
139 }
140}
141
142impl Encode for f64 {
143 fn encode(&self, writer: &mut Writer) -> Result<()> {
144 writer.write_f64(*self)
145 }
146}
147
148impl Decode for f64 {
149 fn decode(reader: &mut Reader) -> Result<Self> {
150 reader.read_f64()
151 }
152}
153
154impl Encode for bool {
155 fn encode(&self, writer: &mut Writer) -> Result<()> {
156 writer.write_bool(*self)
157 }
158}
159
160impl Decode for bool {
161 fn decode(reader: &mut Reader) -> Result<Self> {
162 reader.read_bool()
163 }
164}
165
166impl Encode for char {
167 fn encode(&self, writer: &mut Writer) -> Result<()> {
168 (*self as u32).encode(writer)
169 }
170}
171
172impl Decode for char {
173 fn decode(reader: &mut Reader) -> Result<Self> {
174 let code = u32::decode(reader)?;
175 char::from_u32(code).ok_or_else(|| crate::error::JustcodeError::custom("invalid char"))
176 }
177}
178
179#[cfg(feature = "std")]
182impl<T: Encode> Encode for Vec<T> {
183 fn encode(&self, writer: &mut Writer) -> Result<()> {
184 let config = writer.config();
185 encode_length(writer, self.len(), config)?;
186 for item in self {
187 item.encode(writer)?;
188 }
189 Ok(())
190 }
191}
192
193#[cfg(feature = "std")]
194impl<T: Decode> Decode for Vec<T> {
195 fn decode(reader: &mut Reader) -> Result<Self> {
196 let config = reader.config();
197 let len = decode_length(reader, config)?;
198 let mut vec = Vec::with_capacity(len.min(1024)); for _ in 0..len {
200 vec.push(T::decode(reader)?);
201 }
202 Ok(vec)
203 }
204}
205
206#[cfg(not(feature = "std"))]
207use alloc::vec::Vec;
208
209#[cfg(not(feature = "std"))]
210impl<T: Encode> Encode for Vec<T> {
211 fn encode(&self, writer: &mut Writer) -> Result<()> {
212 let config = writer.config();
213 encode_length(writer, self.len(), config)?;
214 for item in self {
215 item.encode(writer)?;
216 }
217 Ok(())
218 }
219}
220
221#[cfg(not(feature = "std"))]
222impl<T: Decode> Decode for Vec<T> {
223 fn decode(reader: &mut Reader) -> Result<Self> {
224 let config = reader.config();
225 let len = decode_length(reader, config)?;
226 let mut vec = Vec::new();
227 for _ in 0..len {
228 vec.push(T::decode(reader)?);
229 }
230 Ok(vec)
231 }
232}
233
234impl<T: Encode> Encode for Option<T> {
235 fn encode(&self, writer: &mut Writer) -> Result<()> {
236 match self {
237 Some(value) => {
238 writer.write_bool(true)?;
239 value.encode(writer)?;
240 }
241 None => {
242 writer.write_bool(false)?;
243 }
244 }
245 Ok(())
246 }
247}
248
249impl<T: Decode> Decode for Option<T> {
250 fn decode(reader: &mut Reader) -> Result<Self> {
251 if reader.read_bool()? {
252 Ok(Some(T::decode(reader)?))
253 } else {
254 Ok(None)
255 }
256 }
257}
258
259#[cfg(feature = "std")]
260impl Encode for String {
261 fn encode(&self, writer: &mut Writer) -> Result<()> {
262 self.as_bytes().to_vec().encode(writer)
263 }
264}
265
266#[cfg(not(feature = "std"))]
267impl Encode for alloc::string::String {
268 fn encode(&self, writer: &mut Writer) -> Result<()> {
269 self.as_bytes().to_vec().encode(writer)
270 }
271}
272
273#[cfg(feature = "std")]
274impl Decode for String {
275 fn decode(reader: &mut Reader) -> Result<Self> {
276 let bytes = Vec::<u8>::decode(reader)?;
277 String::from_utf8(bytes)
278 .map_err(|e| crate::error::JustcodeError::custom(format!("invalid UTF-8: {}", e)))
279 }
280}
281
282#[cfg(not(feature = "std"))]
283impl Decode for alloc::string::String {
284 fn decode(reader: &mut Reader) -> Result<Self> {
285 extern crate alloc;
286 use alloc::format;
287 let bytes = Vec::<u8>::decode(reader)?;
288 alloc::string::String::from_utf8(bytes)
289 .map_err(|e| crate::error::JustcodeError::custom(format!("invalid UTF-8: {}", e)))
290 }
291}
292
293#[cfg(feature = "std")]
294impl Encode for &str {
295 fn encode(&self, writer: &mut Writer) -> Result<()> {
296 self.as_bytes().to_vec().encode(writer)
297 }
298}
299
300impl Encode for &[u8] {
302 fn encode(&self, writer: &mut Writer) -> Result<()> {
303 self.to_vec().encode(writer)
304 }
305}
306
307impl<T1: Encode> Encode for (T1,) {
310 fn encode(&self, writer: &mut Writer) -> Result<()> {
311 self.0.encode(writer)
312 }
313}
314
315impl<T1: Decode> Decode for (T1,) {
316 fn decode(reader: &mut Reader) -> Result<Self> {
317 Ok((T1::decode(reader)?,))
318 }
319}
320
321impl<T1: Encode, T2: Encode> Encode for (T1, T2) {
322 fn encode(&self, writer: &mut Writer) -> Result<()> {
323 self.0.encode(writer)?;
324 self.1.encode(writer)
325 }
326}
327
328impl<T1: Decode, T2: Decode> Decode for (T1, T2) {
329 fn decode(reader: &mut Reader) -> Result<Self> {
330 Ok((T1::decode(reader)?, T2::decode(reader)?))
331 }
332}
333
334impl<T1: Encode, T2: Encode, T3: Encode> Encode for (T1, T2, T3) {
335 fn encode(&self, writer: &mut Writer) -> Result<()> {
336 self.0.encode(writer)?;
337 self.1.encode(writer)?;
338 self.2.encode(writer)
339 }
340}
341
342impl<T1: Decode, T2: Decode, T3: Decode> Decode for (T1, T2, T3) {
343 fn decode(reader: &mut Reader) -> Result<Self> {
344 Ok((
345 T1::decode(reader)?,
346 T2::decode(reader)?,
347 T3::decode(reader)?,
348 ))
349 }
350}
351
352impl<T1: Encode, T2: Encode, T3: Encode, T4: Encode> Encode for (T1, T2, T3, T4) {
353 fn encode(&self, writer: &mut Writer) -> Result<()> {
354 self.0.encode(writer)?;
355 self.1.encode(writer)?;
356 self.2.encode(writer)?;
357 self.3.encode(writer)
358 }
359}
360
361impl<T1: Decode, T2: Decode, T3: Decode, T4: Decode> Decode for (T1, T2, T3, T4) {
362 fn decode(reader: &mut Reader) -> Result<Self> {
363 Ok((
364 T1::decode(reader)?,
365 T2::decode(reader)?,
366 T3::decode(reader)?,
367 T4::decode(reader)?,
368 ))
369 }
370}
371
372macro_rules! impl_array {
375 ($n:expr) => {
376 impl<T: Encode> Encode for [T; $n] {
377 fn encode(&self, writer: &mut Writer) -> Result<()> {
378 for item in self {
379 item.encode(writer)?;
380 }
381 Ok(())
382 }
383 }
384
385 impl<T: Decode + Copy + Default> Decode for [T; $n] {
386 fn decode(reader: &mut Reader) -> Result<Self> {
387 let mut arr = [T::default(); $n];
388 for item in &mut arr {
389 *item = T::decode(reader)?;
390 }
391 Ok(arr)
392 }
393 }
394 };
395}
396
397impl_array!(0);
398impl_array!(1);
399impl_array!(2);
400impl_array!(3);
401impl_array!(4);
402impl_array!(5);
403impl_array!(6);
404impl_array!(7);
405impl_array!(8);
406impl_array!(9);
407impl_array!(10);
408impl_array!(11);
409impl_array!(12);
410impl_array!(13);
411impl_array!(14);
412impl_array!(15);
413impl_array!(16);
414impl_array!(17);
415impl_array!(18);
416impl_array!(19);
417impl_array!(20);
418impl_array!(21);
419impl_array!(22);
420impl_array!(23);
421impl_array!(24);
422impl_array!(25);
423impl_array!(26);
424impl_array!(27);
425impl_array!(28);
426impl_array!(29);
427impl_array!(30);
428impl_array!(31);
429impl_array!(32);
430
431impl Encode for () {
436 fn encode(&self, _writer: &mut Writer) -> Result<()> {
437 Ok(())
438 }
439}
440
441impl Decode for () {
442 fn decode(_reader: &mut Reader) -> Result<Self> {
443 Ok(())
444 }
445}
446
447#[cfg(test)]
448mod tests {
449 use super::*;
450 use crate::config;
451
452 #[test]
453 fn test_encode_decode_all_primitives() {
454 let config = config::standard();
455
456 let value = 42u8;
458 let encoded = crate::encode_to_vec(&value, config).unwrap();
459 let (decoded, _): (u8, usize) = crate::decode_from_slice(&encoded, config).unwrap();
460 assert_eq!(value, decoded);
461
462 let value = 1000u16;
464 let encoded = crate::encode_to_vec(&value, config).unwrap();
465 let (decoded, _): (u16, usize) = crate::decode_from_slice(&encoded, config).unwrap();
466 assert_eq!(value, decoded);
467
468 let value = 100000u32;
470 let encoded = crate::encode_to_vec(&value, config).unwrap();
471 let (decoded, _): (u32, usize) = crate::decode_from_slice(&encoded, config).unwrap();
472 assert_eq!(value, decoded);
473
474 let value = 1000000000u64;
476 let encoded = crate::encode_to_vec(&value, config).unwrap();
477 let (decoded, _): (u64, usize) = crate::decode_from_slice(&encoded, config).unwrap();
478 assert_eq!(value, decoded);
479
480 let value = 42usize;
482 let encoded = crate::encode_to_vec(&value, config).unwrap();
483 let (decoded, _): (usize, usize) = crate::decode_from_slice(&encoded, config).unwrap();
484 assert_eq!(value, decoded);
485
486 let value = -42i8;
488 let encoded = crate::encode_to_vec(&value, config).unwrap();
489 let (decoded, _): (i8, usize) = crate::decode_from_slice(&encoded, config).unwrap();
490 assert_eq!(value, decoded);
491
492 let value = -1000i16;
494 let encoded = crate::encode_to_vec(&value, config).unwrap();
495 let (decoded, _): (i16, usize) = crate::decode_from_slice(&encoded, config).unwrap();
496 assert_eq!(value, decoded);
497
498 let value = -100000i32;
500 let encoded = crate::encode_to_vec(&value, config).unwrap();
501 let (decoded, _): (i32, usize) = crate::decode_from_slice(&encoded, config).unwrap();
502 assert_eq!(value, decoded);
503
504 let value = -1000000000i64;
506 let encoded = crate::encode_to_vec(&value, config).unwrap();
507 let (decoded, _): (i64, usize) = crate::decode_from_slice(&encoded, config).unwrap();
508 assert_eq!(value, decoded);
509
510 let value = 3.14f32;
512 let encoded = crate::encode_to_vec(&value, config).unwrap();
513 let (decoded, _): (f32, usize) = crate::decode_from_slice(&encoded, config).unwrap();
514 assert!((value - decoded).abs() < 0.001);
515
516 let value = 2.718f64;
518 let encoded = crate::encode_to_vec(&value, config).unwrap();
519 let (decoded, _): (f64, usize) = crate::decode_from_slice(&encoded, config).unwrap();
520 assert!((value - decoded).abs() < 0.0001);
521
522 let value = true;
524 let encoded = crate::encode_to_vec(&value, config).unwrap();
525 let (decoded, _): (bool, usize) = crate::decode_from_slice(&encoded, config).unwrap();
526 assert_eq!(value, decoded);
527
528 let value = false;
529 let encoded = crate::encode_to_vec(&value, config).unwrap();
530 let (decoded, _): (bool, usize) = crate::decode_from_slice(&encoded, config).unwrap();
531 assert_eq!(value, decoded);
532
533 let value = 'A';
535 let encoded = crate::encode_to_vec(&value, config).unwrap();
536 let (decoded, _): (char, usize) = crate::decode_from_slice(&encoded, config).unwrap();
537 assert_eq!(value, decoded);
538
539 let value = '🦊';
540 let encoded = crate::encode_to_vec(&value, config).unwrap();
541 let (decoded, _): (char, usize) = crate::decode_from_slice(&encoded, config).unwrap();
542 assert_eq!(value, decoded);
543 }
544
545 #[test]
546 fn test_encode_decode_primitives() {
547 let config = config::standard();
548 let test_cases: Vec<Box<dyn Fn(&mut Writer) -> Result<()>>> = vec![
549 Box::new(|w| 42u8.encode(w)),
550 Box::new(|w| 1000u16.encode(w)),
551 Box::new(|w| 100000u32.encode(w)),
552 Box::new(|w| 1000000000u64.encode(w)),
553 Box::new(|w| true.encode(w)),
554 Box::new(|w| 3.14f32.encode(w)),
555 ];
556
557 for encode_fn in test_cases {
558 let mut writer = Writer::new(config);
559 encode_fn(&mut writer).unwrap();
560 let bytes = writer.into_bytes();
561 assert!(!bytes.is_empty());
562 }
563 }
564
565 #[test]
566 fn test_encode_decode_vec() {
567 let config = config::standard();
568 let value = vec![1u32, 2, 3, 4, 5];
569 let encoded = crate::encode_to_vec(&value, config).unwrap();
570 let (decoded, _): (Vec<u32>, usize) = crate::decode_from_slice(&encoded, config).unwrap();
571 assert_eq!(value, decoded);
572 }
573
574 #[test]
575 fn test_encode_decode_empty_vec() {
576 let config = config::standard();
577 let value: Vec<u32> = vec![];
578 let encoded = crate::encode_to_vec(&value, config).unwrap();
579 let (decoded, _): (Vec<u32>, usize) = crate::decode_from_slice(&encoded, config).unwrap();
580 assert_eq!(value, decoded);
581 }
582
583 #[test]
584 fn test_encode_decode_large_vec() {
585 let config = config::standard();
586 let value: Vec<u8> = (0u8..255).chain(0u8..255).chain(0u8..255).chain(0u8..235).collect();
587 let encoded = crate::encode_to_vec(&value, config).unwrap();
588 let (decoded, _): (Vec<u8>, usize) = crate::decode_from_slice(&encoded, config).unwrap();
589 assert_eq!(value, decoded);
590 }
591
592 #[test]
593 fn test_encode_decode_option() {
594 let config = config::standard();
595 let value = Some(42u32);
596 let encoded = crate::encode_to_vec(&value, config).unwrap();
597 let (decoded, _): (Option<u32>, usize) = crate::decode_from_slice(&encoded, config).unwrap();
598 assert_eq!(value, decoded);
599
600 let value = None::<u32>;
601 let encoded = crate::encode_to_vec(&value, config).unwrap();
602 let (decoded, _): (Option<u32>, usize) = crate::decode_from_slice(&encoded, config).unwrap();
603 assert_eq!(value, decoded);
604 }
605
606 #[test]
607 fn test_encode_option_none_directly() {
608 let config = config::standard();
609 let mut writer = Writer::new(config);
610 let none: Option<u32> = None;
611 none.encode(&mut writer).unwrap();
612 let bytes = writer.into_bytes();
613 assert_eq!(bytes.len(), 1);
615 assert_eq!(bytes[0], 0);
616 }
617
618 #[test]
619 fn test_encode_option_some_directly() {
620 let config = config::standard();
621 let mut writer = Writer::new(config);
622 let some: Option<u32> = Some(42);
623 some.encode(&mut writer).unwrap();
624 let bytes = writer.into_bytes();
625 assert_eq!(bytes.len(), 5);
627 assert_eq!(bytes[0], 1);
628 }
629
630 #[test]
631 fn test_encode_decode_string() {
632 let config = config::standard();
633 let value = "hello, world!".to_string();
634 let encoded = crate::encode_to_vec(&value, config).unwrap();
635 let (decoded, _): (String, usize) = crate::decode_from_slice(&encoded, config).unwrap();
636 assert_eq!(value, decoded);
637 }
638
639 #[test]
640 fn test_encode_decode_str() {
641 let config = config::standard();
642 let value = "hello, world!";
643 let encoded = crate::encode_to_vec(&value, config).unwrap();
644 let (decoded, _): (String, usize) = crate::decode_from_slice(&encoded, config).unwrap();
645 assert_eq!(value, decoded);
646 }
647
648 #[test]
649 fn test_encode_decode_bytes() {
650 let config = config::standard();
651 let value: &[u8] = &[1, 2, 3, 4, 5];
652 let encoded = crate::encode_to_vec(&value, config).unwrap();
653 let (decoded, _): (Vec<u8>, usize) = crate::decode_from_slice(&encoded, config).unwrap();
654 assert_eq!(value, decoded);
655 }
656
657 #[test]
658 fn test_encode_decode_tuple() {
659 let config = config::standard();
660 let value = (42u32, "hello".to_string(), true);
661 let encoded = crate::encode_to_vec(&value, config).unwrap();
662 let (decoded, _): ((u32, String, bool), usize) =
663 crate::decode_from_slice(&encoded, config).unwrap();
664 assert_eq!(value, decoded);
665 }
666
667 #[test]
668 fn test_encode_decode_tuple1() {
669 let config = config::standard();
670 let value = (42u32,);
671 let encoded = crate::encode_to_vec(&value, config).unwrap();
672 let (decoded, _): ((u32,), usize) = crate::decode_from_slice(&encoded, config).unwrap();
673 assert_eq!(value, decoded);
674 }
675
676 #[test]
677 fn test_encode_decode_tuple2() {
678 let config = config::standard();
679 let value = (42u32, "hello".to_string());
680 let encoded = crate::encode_to_vec(&value, config).unwrap();
681 let (decoded, _): ((u32, String), usize) = crate::decode_from_slice(&encoded, config).unwrap();
682 assert_eq!(value, decoded);
683 }
684
685 #[test]
686 fn test_encode_decode_tuple4() {
687 let config = config::standard();
688 let value = (1u32, 2u32, 3u32, 4u32);
689 let encoded = crate::encode_to_vec(&value, config).unwrap();
690 let (decoded, _): ((u32, u32, u32, u32), usize) = crate::decode_from_slice(&encoded, config).unwrap();
691 assert_eq!(value, decoded);
692 }
693
694 #[test]
695 fn test_encode_decode_unit() {
696 let config = config::standard();
697 let value = ();
698 let encoded = crate::encode_to_vec(&value, config).unwrap();
699 let (decoded, _): ((), usize) = crate::decode_from_slice(&encoded, config).unwrap();
700 assert_eq!(value, decoded);
701 }
702
703 #[test]
704 fn test_encode_decode_arrays() {
705 let config = config::standard();
706
707 let value: [u8; 0] = [];
709 let encoded = crate::encode_to_vec(&value, config).unwrap();
710 let (decoded, _): ([u8; 0], usize) = crate::decode_from_slice(&encoded, config).unwrap();
711 assert_eq!(value, decoded);
712
713 let value = [42u8];
715 let encoded = crate::encode_to_vec(&value, config).unwrap();
716 let (decoded, _): ([u8; 1], usize) = crate::decode_from_slice(&encoded, config).unwrap();
717 assert_eq!(value, decoded);
718
719 let value = [1u32, 2, 3, 4, 5];
721 let encoded = crate::encode_to_vec(&value, config).unwrap();
722 let (decoded, _): ([u32; 5], usize) = crate::decode_from_slice(&encoded, config).unwrap();
723 assert_eq!(value, decoded);
724
725 let value: [u8; 32] = [0; 32];
727 let encoded = crate::encode_to_vec(&value, config).unwrap();
728 let (decoded, _): ([u8; 32], usize) = crate::decode_from_slice(&encoded, config).unwrap();
729 assert_eq!(value, decoded);
730 }
731
732 #[test]
733 fn test_invalid_char() {
734 let config = config::standard();
735 let mut writer = Writer::new(config);
736 writer.write_u32(0x110000).unwrap();
738 let bytes = writer.into_bytes();
739
740 let mut reader = crate::reader::Reader::new(&bytes, config);
741 let result: Result<char> = char::decode(&mut reader);
742 assert!(result.is_err());
743 }
744
745 #[test]
746 fn test_invalid_utf8() {
747 let config = config::standard();
748 let invalid_bytes = vec![0xFF, 0xFE, 0xFD];
750 let mut writer = Writer::new(config);
751 invalid_bytes.encode(&mut writer).unwrap();
752 let bytes = writer.into_bytes();
753
754 let mut reader = crate::reader::Reader::new(&bytes, config);
755 let result: Result<String> = String::decode(&mut reader);
756 assert!(result.is_err());
757 }
758}
759
760#[cfg(all(test, not(feature = "std")))]
762mod no_std_tests {
763 use super::*;
764 use crate::config;
765 extern crate alloc;
766
767 #[test]
768 fn test_no_std_vec_encode() {
769 let config = config::standard();
770 let value = alloc::vec![1u32, 2, 3, 4, 5];
771 let encoded = crate::encode_to_vec(&value, config).unwrap();
772 let (decoded, _): (alloc::vec::Vec<u32>, usize) = crate::decode_from_slice(&encoded, config).unwrap();
773 assert_eq!(value, decoded);
774 }
775
776 #[test]
777 fn test_no_std_vec_empty() {
778 let config = config::standard();
779 let value: alloc::vec::Vec<u32> = alloc::vec![];
780 let encoded = crate::encode_to_vec(&value, config).unwrap();
781 let (decoded, _): (alloc::vec::Vec<u32>, usize) = crate::decode_from_slice(&encoded, config).unwrap();
782 assert_eq!(value, decoded);
783 }
784}