-
Notifications
You must be signed in to change notification settings - Fork 16
/
balance.go
69 lines (58 loc) · 1.28 KB
/
balance.go
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
/*
____ _ _
/ __ \ | | | |
| | | |_ __ ___| | ___ __| | __ _ ___ _ __
| | | | '_ \ / _ \ |/ _ \/ _` |/ _` |/ _ \ '__|
| |__| | | | | __/ | __/ (_| | (_| | __/ |
\____/|_| |_|\___|_|\___|\__,_|\__, |\___|_|
__/ |
|___/
Copyright 2017 - 2019 OneLedger
*/
package balance
// Wrap the amount with owner information
type Balance struct {
Amounts map[string]Coin `json:"amounts"`
}
/*
Generators
*/
func NewBalance() *Balance {
amounts := make(map[string]Coin, 0)
result := &Balance{
Amounts: amounts,
}
return result
}
/*
methods
*/
func (b *Balance) GetCoin(currency Currency) Coin {
if coin, ok := b.Amounts[currency.Name]; ok {
return coin
}
return currency.NewCoinFromInt(0)
}
func (b *Balance) setCoin(coin Coin) *Balance {
b.Amounts[coin.Currency.Name] = coin
return b
}
func (b *Balance) addCoin(coin Coin) *Balance {
old, ok := b.Amounts[coin.Currency.Name]
if ok {
coin = coin.Plus(old)
}
b.Amounts[coin.Currency.Name] = coin
return b
}
// String method used in fmt and Dump
func (b Balance) String() string {
buffer := ""
for _, coin := range b.Amounts {
if buffer != "" {
buffer += ", "
}
buffer += coin.String()
}
return buffer
}