odra_types/
item.rs

1use alloc::{collections::BTreeMap, string::String, vec::Vec};
2use casper_types::{
3    bytesrepr::{FromBytes, ToBytes},
4    U128, U256, U512
5};
6
7use crate::Address;
8
9pub trait OdraItem {
10    fn is_module() -> bool;
11
12    #[cfg(not(target_arch = "wasm32"))]
13    fn events() -> Vec<crate::contract_def::Event> {
14        alloc::vec![]
15    }
16}
17
18macro_rules! impl_odra_item_for_types {
19    ($($t:ty),+) => {
20        $(
21            impl OdraItem for $t {
22                fn is_module() -> bool {
23                    false
24                }
25            }
26        )+
27    };
28}
29
30macro_rules! impl_odra_item_for_array_types {
31    ($($n:expr)+) => {
32        $(
33            impl<T> OdraItem for [T; $n] {
34                fn is_module() -> bool {
35                    false
36                }
37            }
38        )+
39    };
40}
41
42impl_odra_item_for_array_types!(
43    0  1  2  3  4  5  6  7  8  9
44    10 11 12 13 14 15 16 17 18 19
45    20 21 22 23 24 25 26 27 28 29
46    30 31 32
47    64 128 256 512
48);
49
50impl_odra_item_for_types!(
51    Address,
52    String,
53    bool,
54    i32,
55    i64,
56    u8,
57    u32,
58    u64,
59    U128,
60    U256,
61    U512,
62    ()
63);
64
65impl<T: ToBytes + FromBytes> OdraItem for Option<T> {
66    fn is_module() -> bool {
67        false
68    }
69}
70
71impl<T: ToBytes + FromBytes, E: ToBytes + FromBytes> OdraItem for Result<T, E> {
72    fn is_module() -> bool {
73        false
74    }
75}
76
77impl<T: ToBytes + FromBytes, E: ToBytes + FromBytes> OdraItem for BTreeMap<T, E> {
78    fn is_module() -> bool {
79        false
80    }
81}
82
83impl<T: ToBytes + FromBytes> OdraItem for Vec<T> {
84    fn is_module() -> bool {
85        false
86    }
87}
88
89impl<T1: ToBytes + FromBytes> OdraItem for (T1,) {
90    fn is_module() -> bool {
91        false
92    }
93}
94
95impl<T1: ToBytes + FromBytes, T2: ToBytes + FromBytes> OdraItem for (T1, T2) {
96    fn is_module() -> bool {
97        false
98    }
99}
100
101impl<T1: ToBytes + FromBytes, T2: ToBytes + FromBytes, T3: ToBytes + FromBytes> OdraItem
102    for (T1, T2, T3)
103{
104    fn is_module() -> bool {
105        false
106    }
107}