elrond_codec/equivalent/
codec_from.rs

1use crate::{TopDecodeMulti, TopEncodeMulti};
2
3/// Signals that after serializing `T`, we can safely deserialize it as `Self`.
4pub trait CodecFrom<T>: TopDecodeMulti
5where
6    T: TopEncodeMulti,
7{
8}
9
10pub auto trait CodecFromSelf {}
11
12impl<T> CodecFrom<T> for T where T: TopEncodeMulti + TopDecodeMulti + CodecFromSelf {}
13
14impl<'a, T> CodecFrom<&'a T> for T
15where
16    &'a T: TopEncodeMulti,
17    T: TopDecodeMulti,
18{
19}
20
21// Unsigned integer types: the contract can return a smaller capacity result and and we can interpret it as a larger capacity type.
22
23impl CodecFrom<usize> for u64 {}
24impl CodecFrom<u32> for u64 {}
25impl CodecFrom<u16> for u64 {}
26impl CodecFrom<u8> for u64 {}
27
28impl CodecFrom<usize> for u32 {}
29impl CodecFrom<u16> for u32 {}
30impl CodecFrom<u8> for u32 {}
31
32impl CodecFrom<u32> for usize {}
33impl CodecFrom<u16> for usize {}
34impl CodecFrom<u8> for usize {}
35
36impl CodecFrom<u8> for u16 {}
37
38// Signed, the same.
39
40impl CodecFrom<isize> for i64 {}
41impl CodecFrom<i32> for i64 {}
42impl CodecFrom<i16> for i64 {}
43impl CodecFrom<i8> for i64 {}
44
45impl CodecFrom<isize> for i32 {}
46impl CodecFrom<i16> for i32 {}
47impl CodecFrom<i8> for i32 {}
48
49impl CodecFrom<i32> for isize {}
50impl CodecFrom<i16> for isize {}
51impl CodecFrom<i8> for isize {}
52
53impl CodecFrom<i8> for i16 {}