/
prices.go
47 lines (38 loc) · 1.08 KB
/
prices.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
package oracle
import (
"sync"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/umee-network/umee/price-feeder/v2/oracle/provider"
)
type (
PricesByProvider map[provider.Name]map[string]sdk.Dec
PricesWithMutex struct {
prices PricesByProvider
mx sync.RWMutex
}
)
// SetPrices sets the PricesWithMutex.prices value surrounded by a write lock
func (pwm *PricesWithMutex) SetPrices(prices PricesByProvider) {
pwm.mx.Lock()
defer pwm.mx.Unlock()
pwm.prices = prices
}
// GetPricesClone retrieves a clone of PricesWithMutex.prices
// surrounded by a read lock
func (pwm *PricesWithMutex) GetPricesClone() PricesByProvider {
pwm.mx.RLock()
defer pwm.mx.RUnlock()
return pwm.clonePrices()
}
// clonePrices returns a deep copy of PricesWithMutex.prices
func (pwm *PricesWithMutex) clonePrices() PricesByProvider {
clone := make(PricesByProvider, len(pwm.prices))
for provider, prices := range pwm.prices {
pricesClone := make(map[string]sdk.Dec, len(prices))
for denom, price := range prices {
pricesClone[denom] = price
}
clone[provider] = pricesClone
}
return clone
}