multiversx_sc_codec/
codec_convert.rs1use unwrap_infallible::UnwrapInfallible;
2
3use crate::{
4 PanicErrorHandler, TopDecodeMulti, TopDecodeMultiInput, TopEncodeMulti, TopEncodeMultiOutput,
5};
6
7pub fn codec_convert_or_panic<From, To, Medium>(from: From) -> To
11where
12 From: TopEncodeMulti,
13 To: TopDecodeMulti,
14 Medium: Default + TopDecodeMultiInput + TopEncodeMultiOutput,
15{
16 let mut medium: Medium = Default::default();
17 from.multi_encode_or_handle_err(&mut medium, PanicErrorHandler)
18 .unwrap_infallible();
19 To::multi_decode_or_handle_err(&mut medium, PanicErrorHandler).unwrap_infallible()
20}
21
22#[allow(unused)]
23#[cfg(test)]
24mod test {
25 use alloc::vec::Vec;
26
27 use super::*;
28
29 #[test]
30 fn test_codec_convert_or_panic() {
31 assert_eq!(5i64, codec_convert_or_panic::<_, _, Vec<Vec<u8>>>(5i64));
32 assert_eq!(5i64, codec_convert_or_panic::<_, _, Vec<Vec<u8>>>(5i32));
33 assert_eq!(5i64, codec_convert_or_panic::<_, _, Vec<Vec<u8>>>(5i32));
34 }
35
36 fn convert_add<T1, T2, R>(x: T1, y: T2) -> R
37 where
38 T1: TopEncodeMulti,
39 T2: TopEncodeMulti,
40 R: TopDecodeMulti,
41 {
42 let conv_x = codec_convert_or_panic::<T1, u32, Vec<Vec<u8>>>(x);
43 let conv_y = codec_convert_or_panic::<T2, u32, Vec<Vec<u8>>>(y);
44 codec_convert_or_panic::<u32, R, Vec<Vec<u8>>>(conv_x + conv_y)
45 }
46
47 #[test]
48 fn test_convert_add() {
49 assert_eq!(3u32, convert_add(1u32, 2u32));
50 assert_eq!(8u64, convert_add(3u16, 5u8));
51 assert_eq!(17usize, convert_add(8usize, 9usize));
52 }
53}