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