mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-06 07:26:47 +00:00
* Initial currency overhaul before service system implementation * Remove redundant currency string in orderbook.Base Unexport lastupdated field in orderbook.Base as it was being instantiated multiple times Add error handling for process orderbook * Remove redundant currency string in ticker.Price Unexport lastupdated field in ticker.Price Add error handling for process ticker function and fix tests * Phase Two Update * Update translations to use map type - thankyou to kempeng for spotting this * Change pair method name from Display -> Format for better readability * Fixes misspelling and tests * Implement requested changes from GloriousCode * Remove reduntant function and streamlined return in currency_translation.go * Revert pair method naming conventions * Change currency naming conventions * Changed code type to exported Item type with underlying string to reduce complexity * Added interim orderbook process method to orderbook.Base type * Changed feebuilder struct field to currency.Pair * Adds fall over system for backup fx providers * deprecate function and children and fix linter issue with btcmarkets * Fixed requested changes * Fix bug and move mtx for rates * Fixed after rebase oopsies * Fix linter issues * Fixes race conditions in testing functions * Final phase coinmarketcap update * fix linter issues * Implement requested changes * Adds configuration variables to increase/decrease time durations between updating currency file and fetching new currency rates * Add a collection of tests to improve codecov * After rebase oopsy fixes for btse * Fix requested changes * fix after rebase oopsies and add more efficient comparison checks within currency pair * Fix linter issues
96 lines
2.0 KiB
Go
96 lines
2.0 KiB
Go
package currency
|
|
|
|
import "github.com/thrasher-/gocryptotrader/common"
|
|
|
|
// NewCurrenciesFromStringArray returns a Currencies object from strings
|
|
func NewCurrenciesFromStringArray(currencies []string) Currencies {
|
|
var list Currencies
|
|
for i := range currencies {
|
|
if currencies[i] == "" {
|
|
continue
|
|
}
|
|
list = append(list, NewCode(currencies[i]))
|
|
}
|
|
return list
|
|
}
|
|
|
|
// Currencies define a range of supported currency codes
|
|
type Currencies []Code
|
|
|
|
// Strings returns an array of currency strings
|
|
func (c Currencies) Strings() []string {
|
|
var list []string
|
|
for _, d := range c {
|
|
list = append(list, d.String())
|
|
}
|
|
return list
|
|
}
|
|
|
|
// Contains checks to see if a currency code is contained in the currency list
|
|
func (c Currencies) Contains(cc Code) bool {
|
|
for i := range c {
|
|
if c[i].Item == cc.Item {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Join returns a comma serparated string
|
|
func (c Currencies) Join() string {
|
|
return common.JoinStrings(c.Strings(), ",")
|
|
}
|
|
|
|
// UnmarshalJSON comforms type to the umarshaler interface
|
|
func (c *Currencies) UnmarshalJSON(d []byte) error {
|
|
var configCurrencies string
|
|
err := common.JSONDecode(d, &configCurrencies)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var allTheCurrencies Currencies
|
|
for _, data := range common.SplitStrings(configCurrencies, ",") {
|
|
allTheCurrencies = append(allTheCurrencies, NewCode(data))
|
|
}
|
|
|
|
*c = allTheCurrencies
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON conforms type to the marshaler interface
|
|
func (c Currencies) MarshalJSON() ([]byte, error) {
|
|
return common.JSONEncode(c.Join())
|
|
}
|
|
|
|
// Match returns if the full list equals the supplied list
|
|
func (c Currencies) Match(other Currencies) bool {
|
|
if len(c) != len(other) {
|
|
return false
|
|
}
|
|
|
|
for _, d := range c {
|
|
var found bool
|
|
for i := range other {
|
|
if d == other[i] {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// Slice exposes the underlying type
|
|
func (c Currencies) Slice() []Code {
|
|
return c
|
|
}
|
|
|
|
// HasData checks to see if Currencies type has actual currencies
|
|
func (c Currencies) HasData() bool {
|
|
return len(c) != 0
|
|
}
|