mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-20 15:10:10 +00:00
Fixes issue: https://github.com/thrasher-/gocryptotrader/issues/131 Supersedes: https://github.com/thrasher-/gocryptotrader/pull/123
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package base
|
|
|
|
import (
|
|
"errors"
|
|
"log"
|
|
)
|
|
|
|
// IFXProviders contains an array of foreign exchange interfaces
|
|
type IFXProviders []IFXProvider
|
|
|
|
// IFXProvider enforces standard functions for all foreign exchange providers
|
|
// supported in GoCryptoTrader
|
|
type IFXProvider interface {
|
|
Setup(config Settings)
|
|
GetRates(baseCurrency, symbols string) (map[string]float64, error)
|
|
GetName() string
|
|
IsEnabled() bool
|
|
IsPrimaryProvider() bool
|
|
}
|
|
|
|
// GetCurrencyData returns currency data from enabled FX providers
|
|
func (fxp IFXProviders) GetCurrencyData(baseCurrency, symbols string) (map[string]float64, error) {
|
|
for x := range fxp {
|
|
if fxp[x].IsPrimaryProvider() && fxp[x].IsEnabled() {
|
|
rates, err := fxp[x].GetRates(baseCurrency, symbols)
|
|
if err != nil {
|
|
log.Println(err)
|
|
for y := range fxp {
|
|
if !fxp[y].IsPrimaryProvider() && fxp[x].IsEnabled() {
|
|
rates, err = fxp[y].GetRates(baseCurrency, symbols)
|
|
if err != nil {
|
|
log.Println(err)
|
|
continue
|
|
}
|
|
return rates, nil
|
|
}
|
|
}
|
|
return nil, errors.New("ForexProvider error GetCurrencyData() failed to aquire data")
|
|
}
|
|
return rates, nil
|
|
}
|
|
}
|
|
return nil, errors.New("ForexProvider error GetCurrencyData() no providers enabled")
|
|
}
|