Skip to content

Commit 8085550

Browse files
committed
primitives - Balances.spend only for CheckedState
1 parent 8d31b44 commit 8085550

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

primitives/src/balances.rs

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use thiserror::Error;
66

77
#[derive(Serialize, Debug, Clone, PartialEq, Eq, Default)]
88
#[serde(rename_all = "camelCase")]
9-
pub struct Balances<S: BalancesState> {
9+
pub struct Balances<S: BalancesState = CheckedState> {
1010
pub earners: UnifiedMap,
1111
pub spenders: UnifiedMap,
1212
state: PhantomData<S>,
@@ -38,33 +38,14 @@ impl Balances<UncheckedState> {
3838
}
3939

4040
impl<S: BalancesState> Balances<S> {
41-
pub fn new() -> Balances<CheckedState> {
41+
pub fn new() -> Balances<S> {
4242
Balances {
4343
earners: Default::default(),
4444
spenders: Default::default(),
4545
state: Default::default(),
4646
}
4747
}
4848

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-
6849
/// Adds the spender to the Balances with `0` if he does not exist
6950
pub fn add_spender(&mut self, spender: Address) {
7051
self.spenders
@@ -101,6 +82,27 @@ impl<S: BalancesState> Balances<S> {
10182
}
10283
}
10384

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+
104106
#[derive(Debug, Error)]
105107
pub enum OverflowError {
106108
#[error("Spender {0} amount overflowed")]

0 commit comments

Comments
 (0)