@@ -6,7 +6,7 @@ use thiserror::Error;
6
6
7
7
#[ derive( Serialize , Debug , Clone , PartialEq , Eq , Default ) ]
8
8
#[ serde( rename_all = "camelCase" ) ]
9
- pub struct Balances < S : BalancesState > {
9
+ pub struct Balances < S : BalancesState = CheckedState > {
10
10
pub earners : UnifiedMap ,
11
11
pub spenders : UnifiedMap ,
12
12
state : PhantomData < S > ,
@@ -38,33 +38,14 @@ impl Balances<UncheckedState> {
38
38
}
39
39
40
40
impl < S : BalancesState > Balances < S > {
41
- pub fn new ( ) -> Balances < CheckedState > {
41
+ pub fn new ( ) -> Balances < S > {
42
42
Balances {
43
43
earners : Default :: default ( ) ,
44
44
spenders : Default :: default ( ) ,
45
45
state : Default :: default ( ) ,
46
46
}
47
47
}
48
48
49
- pub fn spend (
50
- & mut self ,
51
- spender : Address ,
52
- earner : Address ,
53
- amount : UnifiedNum ,
54
- ) -> Result < ( ) , OverflowError > {
55
- let spent = self . spenders . entry ( spender) . or_default ( ) ;
56
- * spent = spent
57
- . checked_add ( & amount)
58
- . ok_or ( OverflowError :: Spender ( spender) ) ?;
59
-
60
- let earned = self . earners . entry ( earner) . or_default ( ) ;
61
- * earned = earned
62
- . checked_add ( & amount)
63
- . ok_or ( OverflowError :: Earner ( earner) ) ?;
64
-
65
- Ok ( ( ) )
66
- }
67
-
68
49
/// Adds the spender to the Balances with `0` if he does not exist
69
50
pub fn add_spender ( & mut self , spender : Address ) {
70
51
self . spenders
@@ -101,6 +82,27 @@ impl<S: BalancesState> Balances<S> {
101
82
}
102
83
}
103
84
85
+ impl Balances < CheckedState > {
86
+ pub fn spend (
87
+ & mut self ,
88
+ spender : Address ,
89
+ earner : Address ,
90
+ amount : UnifiedNum ,
91
+ ) -> Result < ( ) , OverflowError > {
92
+ let spent = self . spenders . entry ( spender) . or_default ( ) ;
93
+ * spent = spent
94
+ . checked_add ( & amount)
95
+ . ok_or ( OverflowError :: Spender ( spender) ) ?;
96
+
97
+ let earned = self . earners . entry ( earner) . or_default ( ) ;
98
+ * earned = earned
99
+ . checked_add ( & amount)
100
+ . ok_or ( OverflowError :: Earner ( earner) ) ?;
101
+
102
+ Ok ( ( ) )
103
+ }
104
+ }
105
+
104
106
#[ derive( Debug , Error ) ]
105
107
pub enum OverflowError {
106
108
#[ error( "Spender {0} amount overflowed" ) ]
0 commit comments