1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
pub struct TokenProperties {
    pub num_decimals: usize,
    pub can_freeze: bool,
    pub can_wipe: bool,
    pub can_pause: bool,
    pub can_transfer_create_role: bool,
    pub can_mint: bool,
    pub can_burn: bool,
    pub can_change_owner: bool,
    pub can_upgrade: bool,
    pub can_add_special_roles: bool,
}
pub struct FungibleTokenProperties {
    pub num_decimals: usize,
    pub can_freeze: bool,
    pub can_wipe: bool,
    pub can_pause: bool,
    pub can_mint: bool,
    pub can_burn: bool,
    pub can_change_owner: bool,
    pub can_upgrade: bool,
    pub can_add_special_roles: bool,
}

pub struct NonFungibleTokenProperties {
    pub can_freeze: bool,
    pub can_wipe: bool,
    pub can_pause: bool,
    pub can_transfer_create_role: bool,
    pub can_change_owner: bool,
    pub can_upgrade: bool,
    pub can_add_special_roles: bool,
}

pub struct SemiFungibleTokenProperties {
    pub can_freeze: bool,
    pub can_wipe: bool,
    pub can_pause: bool,
    pub can_transfer_create_role: bool,
    pub can_change_owner: bool,
    pub can_upgrade: bool,
    pub can_add_special_roles: bool,
}

pub struct MetaTokenProperties {
    pub num_decimals: usize,
    pub can_freeze: bool,
    pub can_wipe: bool,
    pub can_pause: bool,
    pub can_transfer_create_role: bool,
    pub can_change_owner: bool,
    pub can_upgrade: bool,
    pub can_add_special_roles: bool,
}

impl Default for TokenProperties {
    fn default() -> Self {
        Self {
            num_decimals: 0,
            can_freeze: true,
            can_wipe: true,
            can_pause: true,
            can_transfer_create_role: false,
            can_mint: false,
            can_burn: false,
            can_change_owner: true,
            can_upgrade: true,
            can_add_special_roles: true,
        }
    }
}

impl Default for FungibleTokenProperties {
    fn default() -> Self {
        Self {
            num_decimals: 0,
            can_freeze: true,
            can_wipe: true,
            can_pause: true,
            can_mint: false,
            can_burn: false,
            can_change_owner: true,
            can_upgrade: true,
            can_add_special_roles: true,
        }
    }
}

impl Default for NonFungibleTokenProperties {
    fn default() -> Self {
        Self {
            can_freeze: true,
            can_wipe: true,
            can_pause: true,
            can_transfer_create_role: true,
            can_change_owner: true,
            can_upgrade: true,
            can_add_special_roles: true,
        }
    }
}

impl Default for SemiFungibleTokenProperties {
    fn default() -> Self {
        Self {
            can_freeze: true,
            can_wipe: true,
            can_pause: true,
            can_transfer_create_role: true,
            can_change_owner: true,
            can_upgrade: true,
            can_add_special_roles: true,
        }
    }
}

impl Default for MetaTokenProperties {
    fn default() -> Self {
        Self {
            num_decimals: 0,
            can_freeze: true,
            can_wipe: true,
            can_pause: true,
            can_transfer_create_role: true,
            can_change_owner: true,
            can_upgrade: true,
            can_add_special_roles: true,
        }
    }
}

/// Represents property arguments to be sent to the system SC.
///
/// Fields set to None will not be mentioned at all. When upgrading tokens, this means leaving the old value in place.
#[derive(Default)]
pub struct TokenPropertyArguments {
    pub can_freeze: Option<bool>,
    pub can_wipe: Option<bool>,
    pub can_pause: Option<bool>,
    pub can_transfer_create_role: Option<bool>,
    pub can_mint: Option<bool>,
    pub can_burn: Option<bool>,
    pub can_change_owner: Option<bool>,
    pub can_upgrade: Option<bool>,
    pub can_add_special_roles: Option<bool>,
}