Split up common.go, file path fixes and much more

This commit is contained in:
Adrian Gallagher
2019-06-04 17:04:18 +10:00
parent 8c62316e82
commit e965e54e09
74 changed files with 524 additions and 617 deletions

View File

@@ -11,7 +11,7 @@ import "github.com/thrasher-/gocryptotrader/common"
testString := "aAaAa"
upper := common.StringToUpper(testString)
upper := strings.ToUpper(testString)
// upper == "AAAAA"
```

View File

@@ -6,6 +6,7 @@ import (
"html/template"
"log"
"os"
"runtime"
"strings"
"time"
@@ -118,7 +119,7 @@ func main() {
codebasePaths = make(map[string]string)
codebaseTemplatePath = make(map[string]string)
codebaseReadme = make(map[string]readme)
path = common.GetOSPathSlash()
path = getOSPathSlash()
if err := getContributorList(); err != nil {
log.Fatal("GoCryptoTrader: Exchange documentation tool GET error ", err)
@@ -139,6 +140,16 @@ func main() {
fmt.Println("\nTool finished")
}
// getOSPathSlash returns the slash used by the operating systems
// file system
// TO-DO: Change all paths to not use this
func getOSPathSlash() string {
if runtime.GOOS == "windows" {
return "\\"
}
return "/"
}
// updateReadme iterates through codebase paths to check for readme files and either adds
// or replaces with new readme files.
func updateReadme() error {
@@ -295,18 +306,18 @@ func getslashFromName(packageName string) string {
}
var globS = []string{
fmt.Sprintf("common_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("communications_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("config_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("currency_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("events_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("exchanges_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("portfolio_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("root_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("sub_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("testdata_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("tools_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("web_templates%s*", common.GetOSPathSlash()),
fmt.Sprintf("common_templates%s*", getOSPathSlash()),
fmt.Sprintf("communications_templates%s*", getOSPathSlash()),
fmt.Sprintf("config_templates%s*", getOSPathSlash()),
fmt.Sprintf("currency_templates%s*", getOSPathSlash()),
fmt.Sprintf("events_templates%s*", getOSPathSlash()),
fmt.Sprintf("exchanges_templates%s*", getOSPathSlash()),
fmt.Sprintf("portfolio_templates%s*", getOSPathSlash()),
fmt.Sprintf("root_templates%s*", getOSPathSlash()),
fmt.Sprintf("sub_templates%s*", getOSPathSlash()),
fmt.Sprintf("testdata_templates%s*", getOSPathSlash()),
fmt.Sprintf("tools_templates%s*", getOSPathSlash()),
fmt.Sprintf("web_templates%s*", getOSPathSlash()),
}
// addTemplates adds all the template files

View File

@@ -7,12 +7,13 @@ import (
"log"
"os"
"os/exec"
"github.com/thrasher-/gocryptotrader/currency"
"github.com/thrasher-/gocryptotrader/exchanges/assets"
"path/filepath"
"strings"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/config"
"github.com/thrasher-/gocryptotrader/currency"
"github.com/thrasher-/gocryptotrader/exchanges/assets"
)
const (
@@ -22,9 +23,9 @@ const (
packageMain = "%s.go"
packageReadme = "README.md"
exchangePackageLocation = "..%s..%sexchanges%s"
exchangeLocation = "..%s..%sexchange.go"
exchangeConfigPath = "..%s..%stestdata%sconfigtest.json"
exchangePackageLocation = "../../exchanges"
exchangeLocation = "../../exchange.go"
exchangeConfigPath = "../../testdata/configtest.json"
)
var (
@@ -84,9 +85,9 @@ func main() {
log.Fatal("GoCryptoTrader: Exchange templating tool stopped...")
}
newExchangeName = common.StringToLower(newExchangeName)
newExchangeName = strings.ToLower(newExchangeName)
v := newExchangeName[:1]
capName := common.StringToUpper(v) + newExchangeName[1:]
capName := strings.ToUpper(v) + newExchangeName[1:]
exch := exchange{
Name: newExchangeName,
@@ -97,18 +98,14 @@ func main() {
FIX: fixSupport,
}
osPathSlash := common.GetOSPathSlash()
exchangeJSON := fmt.Sprintf(exchangeConfigPath, osPathSlash, osPathSlash, osPathSlash)
configTestFile := config.GetConfig()
err = configTestFile.LoadConfig(exchangeJSON)
err = configTestFile.LoadConfig(exchangeConfigPath)
if err != nil {
log.Fatal("GoCryptoTrader: Exchange templating configuration retrieval error ", err)
}
// NOTE need to nullify encrypt configuration
var configTestExchanges []string
for x := range configTestFile.Exchanges {
configTestExchanges = append(configTestExchanges, configTestFile.Exchanges[x].Name)
}
@@ -137,18 +134,12 @@ func main() {
log.Fatal("GoCryptoTrader: Exchange templating configuration error - cannot save")
}
exchangeDirectory = fmt.Sprintf(
exchangePackageLocation+newExchangeName+"%s",
osPathSlash,
osPathSlash,
osPathSlash,
osPathSlash)
exchangeTest = fmt.Sprintf(exchangeDirectory+packageTests, newExchangeName)
exchangeTypes = fmt.Sprintf(exchangeDirectory+packageTypes, newExchangeName)
exchangeWrapper = fmt.Sprintf(exchangeDirectory+packageWrapper, newExchangeName)
exchangeMain = fmt.Sprintf(exchangeDirectory+packageMain, newExchangeName)
exchangeReadme = exchangeDirectory + packageReadme
exchangeDirectory = filepath.Join(exchangePackageLocation, newExchangeName)
exchangeTest = filepath.Join(exchangeDirectory, fmt.Sprintf(packageTests, newExchangeName))
exchangeTypes = filepath.Join(exchangeDirectory, fmt.Sprintf(packageTypes, newExchangeName))
exchangeWrapper = filepath.Join(exchangeDirectory, fmt.Sprintf(packageWrapper, newExchangeName))
exchangeMain = filepath.Join(exchangeDirectory, fmt.Sprintf(packageMain, newExchangeName))
exchangeReadme = filepath.Join(exchangeDirectory, packageReadme)
err = os.Mkdir(exchangeDirectory, 0700)
if err != nil {

View File

@@ -60,9 +60,9 @@ func ({{.Variable}} *{{.CapitalName}}) Setup(exch *config.ExchangeConfig) error
{{.Variable}}.SetHTTPClientUserAgent(exch.HTTPUserAgent)
{{.Variable}}.Verbose = exch.Verbose
{{.Variable}}.Websocket.SetWsStatusAndConnection(exch.Features.Enabled.Websocket)
{{.Variable}}.BaseCurrencies = common.SplitStrings(exch.BaseCurrencies, ",")
{{.Variable}}.AvailablePairs = common.SplitStrings(exch.AvailablePairs, ",")
{{.Variable}}.EnabledPairs = common.SplitStrings(exch.EnabledPairs, ",")
{{.Variable}}.BaseCurrencies = strings.Split(exch.BaseCurrencies, ",")
{{.Variable}}.AvailablePairs = strings.Split(exch.AvailablePairs, ",")
{{.Variable}}.EnabledPairs = strings.Split(exch.EnabledPairs, ",")
err := {{.Variable}}.SetCurrencyPairFormat()
if err != nil {
log.Fatal(err)

View File

@@ -29,7 +29,7 @@ import "github.com/thrasher-/gocryptotrader/common"
testString := "aAaAa"
upper := common.StringToUpper(testString)
upper := strings.ToUpper(testString)
// upper == "AAAAA"
```

View File

@@ -14,7 +14,6 @@ import (
"path/filepath"
"reflect"
"regexp"
"runtime"
"strconv"
"strings"
"time"
@@ -81,12 +80,6 @@ func StringSliceDifference(slice1, slice2 []string) []string {
return diff
}
// StringContains checks a substring if it contains your input then returns a
// bool
func StringContains(input, substring string) bool {
return strings.Contains(input, substring)
}
// StringDataContains checks the substring array with an input and returns a bool
func StringDataContains(haystack []string, needle string) bool {
data := strings.Join(haystack, ",")
@@ -118,45 +111,13 @@ func StringDataCompareInsensitive(haystack []string, needle string) bool {
// a bool irrespective of lower or upper case strings
func StringDataContainsInsensitive(haystack []string, needle string) bool {
for _, data := range haystack {
if strings.Contains(StringToUpper(data), StringToUpper(needle)) {
if strings.Contains(strings.ToUpper(data), strings.ToUpper(needle)) {
return true
}
}
return false
}
// JoinStrings joins an array together with the required separator and returns
// it as a string
func JoinStrings(input []string, separator string) string {
return strings.Join(input, separator)
}
// SplitStrings splits blocks of strings from string into a string array using
// a separator ie "," or "_"
func SplitStrings(input, separator string) []string {
return strings.Split(input, separator)
}
// TrimString trims unwanted prefixes or postfixes
func TrimString(input, cutset string) string {
return strings.Trim(input, cutset)
}
// ReplaceString replaces a string with another
func ReplaceString(input, old, newStr string, n int) string {
return strings.Replace(input, old, newStr, n)
}
// StringToUpper changes strings to uppercase
func StringToUpper(input string) string {
return strings.ToUpper(input)
}
// StringToLower changes strings to lowercase
func StringToLower(input string) string {
return strings.ToLower(input)
}
// IsEnabled takes in a boolean param and returns a string if it is enabled
// or disabled
func IsEnabled(isEnabled bool) string {
@@ -170,7 +131,7 @@ func IsEnabled(isEnabled bool) string {
// regexp package // Validation issues occurring because "3" is contained in
// litecoin and Bitcoin addresses - non-fatal
func IsValidCryptoAddress(address, crypto string) (bool, error) {
switch StringToLower(crypto) {
switch strings.ToLower(crypto) {
case "btc":
return regexp.MatchString("^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$", address)
case "ltc":
@@ -184,7 +145,7 @@ func IsValidCryptoAddress(address, crypto string) (bool, error) {
// YesOrNo returns a boolean variable to check if input is "y" or "yes"
func YesOrNo(input string) bool {
if StringToLower(input) == "y" || StringToLower(input) == "yes" {
if strings.ToLower(input) == "y" || strings.ToLower(input) == "yes" {
return true
}
return false
@@ -276,7 +237,7 @@ func JSONEncode(v interface{}) ([]byte, error) {
// JSONDecode decodes JSON data into a structure
func JSONDecode(data []byte, to interface{}) error {
if !StringContains(reflect.ValueOf(to).Type().String(), "*") {
if !strings.Contains(reflect.ValueOf(to).Type().String(), "*") {
return errors.New("json decode error - memory address not supplied")
}
return json.Unmarshal(data, to)
@@ -294,7 +255,7 @@ func EncodeURLValues(urlPath string, values url.Values) string {
// ExtractHost returns the hostname out of a string
func ExtractHost(address string) string {
host := SplitStrings(address, ":")[0]
host := strings.Split(address, ":")[0]
if host == "" {
return "localhost"
}
@@ -303,7 +264,7 @@ func ExtractHost(address string) string {
// ExtractPort returns the port name out of a string
func ExtractPort(host string) int {
portStr := SplitStrings(host, ":")[1]
portStr := strings.Split(host, ":")[1]
port, _ := strconv.Atoi(portStr)
return port
}
@@ -386,15 +347,6 @@ func GetExecutablePath() (string, error) {
return filepath.Dir(ex), nil
}
// GetOSPathSlash returns the slash used by the operating systems
// file system
func GetOSPathSlash() string {
if runtime.GOOS == "windows" {
return "\\"
}
return "/"
}
// UnixMillis converts a UnixNano timestamp to milliseconds
func UnixMillis(t time.Time) int64 {
return t.UnixNano() / int64(time.Millisecond)
@@ -405,54 +357,6 @@ func RecvWindow(d time.Duration) int64 {
return int64(d) / int64(time.Millisecond)
}
// FloatFromString format
func FloatFromString(raw interface{}) (float64, error) {
str, ok := raw.(string)
if !ok {
return 0, fmt.Errorf("unable to parse, value not string: %T", raw)
}
flt, err := strconv.ParseFloat(str, 64)
if err != nil {
return 0, fmt.Errorf("could not convert value: %s Error: %s", str, err)
}
return flt, nil
}
// IntFromString format
func IntFromString(raw interface{}) (int, error) {
str, ok := raw.(string)
if !ok {
return 0, fmt.Errorf("unable to parse, value not string: %T", raw)
}
n, err := strconv.Atoi(str)
if err != nil {
return 0, fmt.Errorf("unable to parse as int: %T", raw)
}
return n, nil
}
// Int64FromString format
func Int64FromString(raw interface{}) (int64, error) {
str, ok := raw.(string)
if !ok {
return 0, fmt.Errorf("unable to parse, value not string: %T", raw)
}
n, err := strconv.ParseInt(str, 10, 64)
if err != nil {
return 0, fmt.Errorf("unable to parse as int64: %T", raw)
}
return n, nil
}
// TimeFromUnixTimestampFloat format
func TimeFromUnixTimestampFloat(raw interface{}) (time.Time, error) {
ts, ok := raw.(float64)
if !ok {
return time.Time{}, fmt.Errorf("unable to parse, value not float64: %T", raw)
}
return time.Unix(0, int64(ts)*int64(time.Millisecond)), nil
}
// GetDefaultDataDir returns the default data directory
// Windows - C:\Users\%USER%\AppData\Roaming\GoCryptoTrader
// Linux/Unix or OSX - $HOME/.gocryptotrader

View File

@@ -73,28 +73,6 @@ func TestIsValidCryptoAddress(t *testing.T) {
}
}
func TestStringToLower(t *testing.T) {
t.Parallel()
upperCaseString := "HEY MAN"
expectedResult := "hey man"
actualResult := StringToLower(upperCaseString)
if actualResult != expectedResult {
t.Errorf("Test failed. Expected '%s'. Actual '%s'",
expectedResult, actualResult)
}
}
func TestStringToUpper(t *testing.T) {
t.Parallel()
upperCaseString := "hey man"
expectedResult := "HEY MAN"
actualResult := StringToUpper(upperCaseString)
if actualResult != expectedResult {
t.Errorf("Test failed. Expected '%s'. Actual '%s'",
expectedResult, actualResult)
}
}
func TestStringSliceDifference(t *testing.T) {
t.Parallel()
originalInputOne := []string{"hello"}
@@ -107,18 +85,6 @@ func TestStringSliceDifference(t *testing.T) {
}
}
func TestStringContains(t *testing.T) {
t.Parallel()
originalInput := "hello"
originalInputSubstring := "he"
expectedOutput := true
actualResult := StringContains(originalInput, originalInputSubstring)
if actualResult != expectedOutput {
t.Errorf("Test failed. Expected '%v'. Actual '%v'",
expectedOutput, actualResult)
}
}
func TestStringDataContains(t *testing.T) {
t.Parallel()
originalHaystack := []string{"hello", "world", "USDT", "Contains", "string"}
@@ -196,64 +162,6 @@ func TestStringDataContainsUpper(t *testing.T) {
}
}
func TestJoinStrings(t *testing.T) {
t.Parallel()
originalInputOne := []string{"hello", "moto"}
separator := ","
expectedOutput := "hello,moto"
actualResult := JoinStrings(originalInputOne, separator)
if expectedOutput != actualResult {
t.Errorf("Test failed. Expected '%s'. Actual '%s'",
expectedOutput, actualResult)
}
}
func TestSplitStrings(t *testing.T) {
t.Parallel()
originalInputOne := "hello,moto"
separator := ","
expectedOutput := []string{"hello", "moto"}
actualResult := SplitStrings(originalInputOne, separator)
if !reflect.DeepEqual(expectedOutput, actualResult) {
t.Errorf("Test failed. Expected '%s'. Actual '%s'",
expectedOutput, actualResult)
}
}
func TestTrimString(t *testing.T) {
t.Parallel()
originalInput := "abcd"
cutset := "ad"
expectedOutput := "bc"
actualResult := TrimString(originalInput, cutset)
if expectedOutput != actualResult {
t.Errorf("Test failed. Expected '%s'. Actual '%s'",
expectedOutput, actualResult)
}
}
// TestReplaceString replaces a string with another
func TestReplaceString(t *testing.T) {
t.Parallel()
currency := "BTC-USD"
expectedOutput := "BTCUSD"
actualResult := ReplaceString(currency, "-", "", -1)
if expectedOutput != actualResult {
t.Errorf(
"Test failed. Expected '%s'. Actual '%s'", expectedOutput, actualResult,
)
}
currency = "BTC-USD--"
actualResult = ReplaceString(currency, "-", "", 3)
if expectedOutput != actualResult {
t.Errorf(
"Test failed. Expected '%s'. Actual '%s'", expectedOutput, actualResult,
)
}
}
func TestYesOrNo(t *testing.T) {
t.Parallel()
if !YesOrNo("y") {
@@ -580,14 +488,6 @@ func TestGetExecutablePath(t *testing.T) {
}
}
func TestGetOSPathSlash(t *testing.T) {
output := GetOSPathSlash()
if output != "/" && output != "\\" {
t.Errorf("Test failed. Common GetOSPathSlash. Returned '%s'", output)
}
}
func TestUnixMillis(t *testing.T) {
t.Parallel()
testTime := time.Date(2014, time.October, 28, 0, 32, 0, 0, time.UTC)
@@ -612,96 +512,6 @@ func TestRecvWindow(t *testing.T) {
}
}
func TestFloatFromString(t *testing.T) {
t.Parallel()
testString := "1.41421356237"
expectedOutput := float64(1.41421356237)
actualOutput, err := FloatFromString(testString)
if actualOutput != expectedOutput || err != nil {
t.Errorf("Test failed. Common FloatFromString. Expected '%v'. Actual '%v'. Error: %s",
expectedOutput, actualOutput, err)
}
var testByte []byte
_, err = FloatFromString(testByte)
if err == nil {
t.Error("Test failed. Common FloatFromString. Converted non-string.")
}
testString = " something unconvertible "
_, err = FloatFromString(testString)
if err == nil {
t.Error("Test failed. Common FloatFromString. Converted invalid syntax.")
}
}
func TestIntFromString(t *testing.T) {
t.Parallel()
testString := "1337"
expectedOutput := 1337
actualOutput, err := IntFromString(testString)
if actualOutput != expectedOutput || err != nil {
t.Errorf("Test failed. Common IntFromString. Expected '%v'. Actual '%v'. Error: %s",
expectedOutput, actualOutput, err)
}
var testByte []byte
_, err = IntFromString(testByte)
if err == nil {
t.Error("Test failed. Common IntFromString. Converted non-string.")
}
testString = "1.41421356237"
_, err = IntFromString(testString)
if err == nil {
t.Error("Test failed. Common IntFromString. Converted invalid syntax.")
}
}
func TestInt64FromString(t *testing.T) {
t.Parallel()
testString := "4398046511104"
expectedOutput := int64(1 << 42)
actualOutput, err := Int64FromString(testString)
if actualOutput != expectedOutput || err != nil {
t.Errorf("Test failed. Common Int64FromString. Expected '%v'. Actual '%v'. Error: %s",
expectedOutput, actualOutput, err)
}
var testByte []byte
_, err = Int64FromString(testByte)
if err == nil {
t.Error("Test failed. Common Int64FromString. Converted non-string.")
}
testString = "1.41421356237"
_, err = Int64FromString(testString)
if err == nil {
t.Error("Test failed. Common Int64FromString. Converted invalid syntax.")
}
}
func TestTimeFromUnixTimestampFloat(t *testing.T) {
t.Parallel()
testTimestamp := float64(1414456320000)
expectedOutput := time.Date(2014, time.October, 28, 0, 32, 0, 0, time.UTC)
actualOutput, err := TimeFromUnixTimestampFloat(testTimestamp)
if actualOutput.UTC().String() != expectedOutput.UTC().String() || err != nil {
t.Errorf("Test failed. Common TimeFromUnixTimestampFloat. Expected '%v'. Actual '%v'. Error: %s",
expectedOutput, actualOutput, err)
}
testString := "Time"
_, err = TimeFromUnixTimestampFloat(testString)
if err == nil {
t.Error("Test failed. Common TimeFromUnixTimestampFloat. Converted invalid syntax.")
}
}
func TestGetDefaultDataDir(t *testing.T) {
switch runtime.GOOS {
case "windows":
@@ -758,7 +568,7 @@ func TestCreateDir(t *testing.T) {
if !ok {
t.Fatal("LookupEnv failed. APPDATA is not set")
}
dir = dir + GetOSPathSlash() + "GoCryptoTrader\\TestFileASDFG"
dir = filepath.Join(dir, "GoCryptoTrader", "TestFileASDFG")
err = CreateDir(dir)
if err != nil {
t.Fatalf("CreateDir failed. Err: %v", err)
@@ -796,13 +606,14 @@ func TestCreateDir(t *testing.T) {
}
func TestChangePerm(t *testing.T) {
testDir := filepath.Join(GetDefaultDataDir(runtime.GOOS), "TestFileASDFGHJ")
switch runtime.GOOS {
case "windows":
err := ChangePerm("*")
if err == nil {
t.Fatal("expected an error on non-existent path")
}
err = os.Mkdir(GetDefaultDataDir(runtime.GOOS)+GetOSPathSlash()+"TestFileASDFGHJ", 0777)
err = os.Mkdir(testDir, 0777)
if err != nil {
t.Fatalf("Mkdir failed. Err: %v", err)
}
@@ -810,11 +621,11 @@ func TestChangePerm(t *testing.T) {
if err != nil {
t.Fatalf("ChangePerm was unsuccessful. Err: %v", err)
}
_, err = os.Stat(GetDefaultDataDir(runtime.GOOS) + GetOSPathSlash() + "TestFileASDFGHJ")
_, err = os.Stat(testDir)
if err != nil {
t.Fatalf("os.Stat failed. Err: %v", err)
}
err = RemoveFile(GetDefaultDataDir(runtime.GOOS) + GetOSPathSlash() + "TestFileASDFGHJ")
err = RemoveFile(testDir)
if err != nil {
t.Fatalf("RemoveFile failed. Err: %v", err)
}
@@ -823,7 +634,7 @@ func TestChangePerm(t *testing.T) {
if err == nil {
t.Fatal("expected an error on non-existent path")
}
err = os.Mkdir(GetDefaultDataDir(runtime.GOOS)+GetOSPathSlash()+"TestFileASDFGHJ", 0777)
err = os.Mkdir(testDir, 0777)
if err != nil {
t.Fatalf("Mkdir failed. Err: %v", err)
}
@@ -832,14 +643,14 @@ func TestChangePerm(t *testing.T) {
t.Fatalf("ChangePerm was unsuccessful. Err: %v", err)
}
var a os.FileInfo
a, err = os.Stat(GetDefaultDataDir(runtime.GOOS) + GetOSPathSlash() + "TestFileASDFGHJ")
a, err = os.Stat(testDir)
if err != nil {
t.Fatalf("os.Stat failed. Err: %v", err)
}
if a.Mode().Perm() != 0770 {
t.Fatalf("expected file permissions differ. expecting 0770 got %#o", a.Mode().Perm())
}
err = RemoveFile(GetDefaultDataDir(runtime.GOOS) + GetOSPathSlash() + "TestFileASDFGHJ")
err = RemoveFile(testDir)
if err != nil {
t.Fatalf("RemoveFile failed. Err: %v", err)
}

55
common/convert/convert.go Normal file
View File

@@ -0,0 +1,55 @@
package convert
import (
"fmt"
"strconv"
"time"
)
// FloatFromString format
func FloatFromString(raw interface{}) (float64, error) {
str, ok := raw.(string)
if !ok {
return 0, fmt.Errorf("unable to parse, value not string: %T", raw)
}
flt, err := strconv.ParseFloat(str, 64)
if err != nil {
return 0, fmt.Errorf("could not convert value: %s Error: %s", str, err)
}
return flt, nil
}
// IntFromString format
func IntFromString(raw interface{}) (int, error) {
str, ok := raw.(string)
if !ok {
return 0, fmt.Errorf("unable to parse, value not string: %T", raw)
}
n, err := strconv.Atoi(str)
if err != nil {
return 0, fmt.Errorf("unable to parse as int: %T", raw)
}
return n, nil
}
// Int64FromString format
func Int64FromString(raw interface{}) (int64, error) {
str, ok := raw.(string)
if !ok {
return 0, fmt.Errorf("unable to parse, value not string: %T", raw)
}
n, err := strconv.ParseInt(str, 10, 64)
if err != nil {
return 0, fmt.Errorf("unable to parse as int64: %T", raw)
}
return n, nil
}
// TimeFromUnixTimestampFloat format
func TimeFromUnixTimestampFloat(raw interface{}) (time.Time, error) {
ts, ok := raw.(float64)
if !ok {
return time.Time{}, fmt.Errorf("unable to parse, value not float64: %T", raw)
}
return time.Unix(0, int64(ts)*int64(time.Millisecond)), nil
}

View File

@@ -0,0 +1,96 @@
package convert
import (
"testing"
"time"
)
func TestFloatFromString(t *testing.T) {
t.Parallel()
testString := "1.41421356237"
expectedOutput := float64(1.41421356237)
actualOutput, err := FloatFromString(testString)
if actualOutput != expectedOutput || err != nil {
t.Errorf("Test failed. Common FloatFromString. Expected '%v'. Actual '%v'. Error: %s",
expectedOutput, actualOutput, err)
}
var testByte []byte
_, err = FloatFromString(testByte)
if err == nil {
t.Error("Test failed. Common FloatFromString. Converted non-string.")
}
testString = " something unconvertible "
_, err = FloatFromString(testString)
if err == nil {
t.Error("Test failed. Common FloatFromString. Converted invalid syntax.")
}
}
func TestIntFromString(t *testing.T) {
t.Parallel()
testString := "1337"
expectedOutput := 1337
actualOutput, err := IntFromString(testString)
if actualOutput != expectedOutput || err != nil {
t.Errorf("Test failed. Common IntFromString. Expected '%v'. Actual '%v'. Error: %s",
expectedOutput, actualOutput, err)
}
var testByte []byte
_, err = IntFromString(testByte)
if err == nil {
t.Error("Test failed. Common IntFromString. Converted non-string.")
}
testString = "1.41421356237"
_, err = IntFromString(testString)
if err == nil {
t.Error("Test failed. Common IntFromString. Converted invalid syntax.")
}
}
func TestInt64FromString(t *testing.T) {
t.Parallel()
testString := "4398046511104"
expectedOutput := int64(1 << 42)
actualOutput, err := Int64FromString(testString)
if actualOutput != expectedOutput || err != nil {
t.Errorf("Test failed. Common Int64FromString. Expected '%v'. Actual '%v'. Error: %s",
expectedOutput, actualOutput, err)
}
var testByte []byte
_, err = Int64FromString(testByte)
if err == nil {
t.Error("Test failed. Common Int64FromString. Converted non-string.")
}
testString = "1.41421356237"
_, err = Int64FromString(testString)
if err == nil {
t.Error("Test failed. Common Int64FromString. Converted invalid syntax.")
}
}
func TestTimeFromUnixTimestampFloat(t *testing.T) {
t.Parallel()
testTimestamp := float64(1414456320000)
expectedOutput := time.Date(2014, time.October, 28, 0, 32, 0, 0, time.UTC)
actualOutput, err := TimeFromUnixTimestampFloat(testTimestamp)
if actualOutput.UTC().String() != expectedOutput.UTC().String() || err != nil {
t.Errorf("Test failed. Common TimeFromUnixTimestampFloat. Expected '%v'. Actual '%v'. Error: %s",
expectedOutput, actualOutput, err)
}
testString := "Time"
_, err = TimeFromUnixTimestampFloat(testString)
if err == nil {
t.Error("Test failed. Common TimeFromUnixTimestampFloat. Converted invalid syntax.")
}
}

View File

@@ -2,10 +2,10 @@ package base
import (
"fmt"
"strings"
"sync"
"time"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/exchanges/assets"
"github.com/thrasher-/gocryptotrader/exchanges/ticker"
)
@@ -112,7 +112,7 @@ func (b *Base) GetTicker(exchangeName string) string {
tickerPrices[i].PriceATH,
tickerPrices[i].Volume))
}
return common.JoinStrings(packagedTickers, "\n")
return strings.Join(packagedTickers, "\n")
}
// GetOrderbook returns staged orderbook data
@@ -142,7 +142,7 @@ func (b *Base) GetOrderbook(exchangeName string) string {
orderbooks[i].TotalAsks,
orderbooks[i].TotalBids))
}
return common.JoinStrings(packagedOrderbooks, "\n")
return strings.Join(packagedOrderbooks, "\n")
}
// GetPortfolio returns staged portfolio info

View File

@@ -8,6 +8,7 @@ import (
"errors"
"fmt"
"net/http"
"strings"
"sync"
"time"
@@ -364,24 +365,24 @@ func (s *Slack) HandleMessage(msg *Message) error {
return errors.New("msg is nil")
}
msg.Text = common.StringToLower(msg.Text)
msg.Text = strings.ToLower(msg.Text)
switch {
case common.StringContains(msg.Text, cmdStatus):
case strings.Contains(msg.Text, cmdStatus):
return s.WebsocketSend("message", s.GetStatus())
case common.StringContains(msg.Text, cmdHelp):
case strings.Contains(msg.Text, cmdHelp):
return s.WebsocketSend("message", getHelp)
case common.StringContains(msg.Text, cmdTicker):
case strings.Contains(msg.Text, cmdTicker):
return s.WebsocketSend("message", s.GetTicker("ANX"))
case common.StringContains(msg.Text, cmdOrderbook):
case strings.Contains(msg.Text, cmdOrderbook):
return s.WebsocketSend("message", s.GetOrderbook("ANX"))
case common.StringContains(msg.Text, cmdSettings):
case strings.Contains(msg.Text, cmdSettings):
return s.WebsocketSend("message", s.GetSettings())
case common.StringContains(msg.Text, cmdPortfolio):
case strings.Contains(msg.Text, cmdPortfolio):
return s.WebsocketSend("message", s.GetPortfolio())
default:

View File

@@ -89,7 +89,7 @@ func (s *SMSGlobal) GetContactByNumber(number string) (Contact, error) {
// GetContactByName returns a contact with supplied name
func (s *SMSGlobal) GetContactByName(name string) (Contact, error) {
for x := range s.Contacts {
if common.StringToLower(s.Contacts[x].Name) == common.StringToLower(name) {
if strings.ToLower(s.Contacts[x].Name) == strings.ToLower(name) {
return s.Contacts[x], nil
}
}
@@ -113,7 +113,7 @@ func (s *SMSGlobal) AddContact(contact Contact) error {
// ContactExists checks to see if a contact exists
func (s *SMSGlobal) ContactExists(contact Contact) bool {
for x := range s.Contacts {
if s.Contacts[x].Number == contact.Number && common.StringToLower(s.Contacts[x].Name) == common.StringToLower(contact.Name) {
if s.Contacts[x].Number == contact.Number && strings.ToLower(s.Contacts[x].Name) == strings.ToLower(contact.Name) {
return true
}
}
@@ -173,7 +173,7 @@ func (s *SMSGlobal) SendMessage(to, message string) error {
return err
}
if !common.StringContains(resp, "OK: 0; Sent queued message") {
if !strings.Contains(resp, "OK: 0; Sent queued message") {
return errSMSNotSent
}
return nil

View File

@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"net/smtp"
"strings"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/communications/base"
@@ -56,7 +57,7 @@ func (s *SMTPservice) Send(subject, alert string) error {
return errors.New("STMPservice Send() please add subject and alert")
}
list := common.SplitStrings(s.RecipientList, ",")
list := strings.Split(s.RecipientList, ",")
for i := range list {
messageToSend := fmt.Sprintf(

View File

@@ -8,6 +8,7 @@ import (
"errors"
"fmt"
"net/http"
"strings"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/communications/base"
@@ -139,25 +140,25 @@ func (t *Telegram) InitialConnect() {
// HandleMessages handles incoming message from the long polling routine
func (t *Telegram) HandleMessages(text string, chatID int64) error {
switch {
case common.StringContains(text, cmdHelp):
case strings.Contains(text, cmdHelp):
return t.SendMessage(fmt.Sprintf("%s: %s", talkRoot, cmdHelpReply), chatID)
case common.StringContains(text, cmdStart):
case strings.Contains(text, cmdStart):
return t.SendMessage(fmt.Sprintf("%s: START COMMANDS HERE", talkRoot), chatID)
case common.StringContains(text, cmdOrders):
case strings.Contains(text, cmdOrders):
return t.SendMessage(fmt.Sprintf("%s: %s", talkRoot, t.GetOrderbook("ANX")), chatID)
case common.StringContains(text, cmdStatus):
case strings.Contains(text, cmdStatus):
return t.SendMessage(fmt.Sprintf("%s: %s", talkRoot, t.GetStatus()), chatID)
case common.StringContains(text, cmdTicker):
case strings.Contains(text, cmdTicker):
return t.SendMessage(fmt.Sprintf("%s: %s", talkRoot, t.GetTicker("ANX")), chatID)
case common.StringContains(text, cmdSettings):
case strings.Contains(text, cmdSettings):
return t.SendMessage(fmt.Sprintf("%s: %s", talkRoot, t.GetSettings()), chatID)
case common.StringContains(text, cmdPortfolio):
case strings.Contains(text, cmdPortfolio):
return t.SendMessage(fmt.Sprintf("%s: %s", talkRoot, t.GetPortfolio()), chatID)
default:

View File

@@ -47,7 +47,7 @@ const (
// Constants here hold some messages
const (
ErrExchangeNameEmpty = "exchange #%d name is empty"
ErrExchangeAvailablePairsEmpty = "exchange %s avaiable pairs is empty"
ErrExchangeAvailablePairsEmpty = "exchange %s available pairs is empty"
ErrExchangeEnabledPairsEmpty = "exchange %s enabled pairs is empty"
ErrExchangeBaseCurrenciesEmpty = "exchange %s base currencies is empty"
ErrExchangeNotFound = "exchange %s not found"
@@ -95,7 +95,7 @@ func (c *Config) GetExchangeBankAccounts(exchangeName, depositingCurrency string
for x := range c.Exchanges {
if strings.EqualFold(c.Exchanges[x].Name, exchangeName) {
for y := range c.Exchanges[x].BankAccounts {
if common.StringContains(c.Exchanges[x].BankAccounts[y].SupportedCurrencies,
if strings.Contains(c.Exchanges[x].BankAccounts[y].SupportedCurrencies,
depositingCurrency) {
return c.Exchanges[x].BankAccounts[y], nil
}
@@ -130,9 +130,9 @@ func (c *Config) GetClientBankAccounts(exchangeName, targetCurrency string) (Ban
defer m.Unlock()
for x := range c.BankAccounts {
if (common.StringContains(c.BankAccounts[x].SupportedExchanges, exchangeName) ||
if (strings.Contains(c.BankAccounts[x].SupportedExchanges, exchangeName) ||
c.BankAccounts[x].SupportedExchanges == "ALL") &&
common.StringContains(c.BankAccounts[x].SupportedCurrencies, targetCurrency) {
strings.Contains(c.BankAccounts[x].SupportedCurrencies, targetCurrency) {
return c.BankAccounts[x], nil
}
@@ -518,13 +518,13 @@ func (c *Config) CheckPairConfigFormats(exchName string) error {
for y := range loadedPairs {
if pairFmt.Delimiter != "" {
if !common.StringContains(loadedPairs[y].String(), pairFmt.Delimiter) {
if !strings.Contains(loadedPairs[y].String(), pairFmt.Delimiter) {
return fmt.Errorf("exchange %s %s %v pairs does not contain delimiter", exchName, pairsType, assetType)
}
}
if pairFmt.Index != "" {
if !common.StringContains(loadedPairs[y].String(), pairFmt.Index) {
if !strings.Contains(loadedPairs[y].String(), pairFmt.Index) {
return fmt.Errorf("exchange %s %s %v pairs does not contain an index", exchName, pairsType, assetType)
}
}
@@ -602,7 +602,8 @@ func (c *Config) CheckPairConsistency(exchName string) error {
if err != nil {
return fmt.Errorf("exchange %s failed to set pairs: %v", exchName, err)
}
log.Warnf("Exchange %s: No enabled pairs found in available pairs, randomly added %v pair.\n", exchName, newPair)
log.Warnf("Exchange %s: [%v] No enabled pairs found in available pairs, randomly added %v pair.\n",
exchName, assetTypes[x], newPair)
continue
} else {
err = c.SetPairs(exchName, assetTypes[x], true, pairs)
@@ -610,7 +611,8 @@ func (c *Config) CheckPairConsistency(exchName string) error {
return fmt.Errorf("exchange %s failed to set pairs: %v", exchName, err)
}
}
log.Warnf("Exchange %s: Removing enabled pair(s) %v from enabled pairs as it isn't an available pair.", exchName, pairsRemoved.Strings())
log.Warnf("Exchange %s: [%v] Removing enabled pair(s) %v from enabled pairs as it isn't an available pair.",
exchName, assetTypes[x], pairsRemoved.Strings())
}
return nil
}
@@ -1326,15 +1328,20 @@ func GetFilePath(file string) (string, error) {
return "", err
}
oldDir := exePath + common.GetOSPathSlash()
oldDirs := []string{oldDir + ConfigFile, oldDir + EncryptedConfigFile}
oldDirs := []string{
filepath.Join(exePath, ConfigFile),
filepath.Join(exePath, EncryptedConfigFile),
}
newDir := common.GetDefaultDataDir(runtime.GOOS) + common.GetOSPathSlash()
newDir := common.GetDefaultDataDir(runtime.GOOS)
err = common.CreateDir(newDir)
if err != nil {
return "", err
}
newDirs := []string{newDir + ConfigFile, newDir + EncryptedConfigFile}
newDirs := []string{
filepath.Join(newDir, ConfigFile),
filepath.Join(newDir, EncryptedConfigFile),
}
// First upgrade the old dir config file if it exists to the corresponding new one
for x := range oldDirs {

View File

@@ -3,6 +3,7 @@ package currency
import (
"errors"
"fmt"
"strings"
"sync"
"time"
@@ -294,8 +295,8 @@ func (b *BaseCodes) UpdateContract(fullName, symbol, assocExchange string) error
// Register registers a currency from a string and returns a currency code
func (b *BaseCodes) Register(c string) Code {
NewUpperCode := common.StringToUpper(c)
format := common.StringContains(c, NewUpperCode)
NewUpperCode := strings.ToUpper(c)
format := strings.Contains(c, NewUpperCode)
b.mtx.Lock()
defer b.mtx.Unlock()
@@ -321,7 +322,7 @@ func (b *BaseCodes) Register(c string) Code {
// RegisterFiat registers a fiat currency from a string and returns a currency
// code
func (b *BaseCodes) RegisterFiat(c string) (Code, error) {
c = common.StringToUpper(c)
c = strings.ToUpper(c)
b.mtx.Lock()
defer b.mtx.Unlock()
@@ -427,7 +428,7 @@ func (c Code) String() string {
if c.UpperCase {
return c.Item.Symbol
}
return common.StringToLower(c.Item.Symbol)
return strings.ToLower(c.Item.Symbol)
}
// Lower converts the code to lowercase formatting

View File

@@ -8,31 +8,31 @@ import (
func TestRoleString(t *testing.T) {
if Unset.String() != UnsetRollString {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
UnsetRollString,
Unset)
}
if Fiat.String() != FiatCurrencyString {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
FiatCurrencyString,
Fiat)
}
if Cryptocurrency.String() != CryptocurrencyString {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
CryptocurrencyString,
Cryptocurrency)
}
if Token.String() != TokenString {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
TokenString,
Token)
}
if Contract.String() != ContractString {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
ContractString,
Contract)
}
@@ -40,7 +40,7 @@ func TestRoleString(t *testing.T) {
var random Role = 1 << 7
if random.String() != "UNKNOWN" {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
"UNKNOWN",
random)
}
@@ -54,7 +54,7 @@ func TestRoleMarshalJSON(t *testing.T) {
expected := `"fiatCurrency"`
if string(d) != expected {
t.Errorf("Test Failed - Role MarshalJSON() error expected %s but recieved %s",
t.Errorf("Test Failed - Role MarshalJSON() error expected %s but received %s",
expected,
string(d))
}
@@ -100,37 +100,37 @@ func TestRoleUnmarshalJSON(t *testing.T) {
}
if incoming.RoleOne != Unset {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
Unset,
incoming.RoleOne)
}
if incoming.RoleTwo != Cryptocurrency {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
Cryptocurrency,
incoming.RoleTwo)
}
if incoming.RoleThree != Fiat {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
Fiat,
incoming.RoleThree)
}
if incoming.RoleFour != Token {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
Token,
incoming.RoleFour)
}
if incoming.RoleFive != Contract {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
Contract,
incoming.RoleFive)
}
if incoming.RoleUnknown != Unset {
t.Errorf("Test Failed - Role String() error expected %s but recieved %s",
t.Errorf("Test Failed - Role String() error expected %s but received %s",
incoming.RoleFive,
incoming.RoleUnknown)
}
@@ -139,35 +139,35 @@ func TestRoleUnmarshalJSON(t *testing.T) {
func TestBaseCode(t *testing.T) {
var main BaseCodes
if main.HasData() {
t.Errorf("Test Failed - BaseCode HasData() error expected false but recieved %v",
t.Errorf("Test Failed - BaseCode HasData() error expected false but received %v",
main.HasData())
}
catsCode := main.Register("CATS")
if !main.HasData() {
t.Errorf("Test Failed - BaseCode HasData() error expected true but recieved %v",
t.Errorf("Test Failed - BaseCode HasData() error expected true but received %v",
main.HasData())
}
if !main.Register("CATS").Match(catsCode) {
t.Errorf("Test Failed - BaseCode Match() error expected true but recieved %v",
t.Errorf("Test Failed - BaseCode Match() error expected true but received %v",
false)
}
if main.Register("DOGS").Match(catsCode) {
t.Errorf("Test Failed - BaseCode Match() error expected false but recieved %v",
t.Errorf("Test Failed - BaseCode Match() error expected false but received %v",
true)
}
loadedCurrencies := main.GetCurrencies()
if loadedCurrencies.Contains(main.Register("OWLS")) {
t.Errorf("Test Failed - BaseCode Contains() error expected false but recieved %v",
t.Errorf("Test Failed - BaseCode Contains() error expected false but received %v",
true)
}
if !loadedCurrencies.Contains(catsCode) {
t.Errorf("Test Failed - BaseCode Contains() error expected true but recieved %v",
t.Errorf("Test Failed - BaseCode Contains() error expected true but received %v",
false)
}
@@ -194,22 +194,22 @@ func TestBaseCode(t *testing.T) {
contract := main.Register("XBTUSD")
if contract.IsFiatCurrency() {
t.Errorf("Test Failed - BaseCode IsFiatCurrency() error expected false but recieved %v",
t.Errorf("Test Failed - BaseCode IsFiatCurrency() error expected false but received %v",
true)
}
if contract.IsCryptocurrency() {
t.Errorf("Test Failed - BaseCode IsFiatCurrency() error expected false but recieved %v",
t.Errorf("Test Failed - BaseCode IsFiatCurrency() error expected false but received %v",
true)
}
if contract.IsDefaultFiatCurrency() {
t.Errorf("Test Failed - BaseCode IsDefaultFiatCurrency() error expected false but recieved %v",
t.Errorf("Test Failed - BaseCode IsDefaultFiatCurrency() error expected false but received %v",
true)
}
if contract.IsDefaultFiatCurrency() {
t.Errorf("Test Failed - BaseCode IsFiatCurrency() error expected false but recieved %v",
t.Errorf("Test Failed - BaseCode IsFiatCurrency() error expected false but received %v",
true)
}
@@ -229,32 +229,32 @@ func TestBaseCode(t *testing.T) {
}
if len(full.Contracts) != 1 {
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 1 but recieved %v",
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 1 but received %v",
len(full.Contracts))
}
if len(full.Cryptocurrency) != 2 {
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 1 but recieved %v",
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 1 but received %v",
len(full.Cryptocurrency))
}
if len(full.FiatCurrency) != 1 {
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 1 but recieved %v",
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 1 but received %v",
len(full.FiatCurrency))
}
if len(full.Token) != 1 {
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 1 but recieved %v",
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 1 but received %v",
len(full.Token))
}
if len(full.UnsetCurrency) != 3 {
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 3 but recieved %v",
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 3 but received %v",
len(full.UnsetCurrency))
}
if !full.LastMainUpdate.IsZero() {
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 0 but recieved %s",
t.Errorf("Test Failed - BaseCode GetFullCurrencyData() error expected 0 but received %s",
full.LastMainUpdate)
}
}
@@ -263,7 +263,7 @@ func TestCodeString(t *testing.T) {
expected := "TEST"
cc := NewCode("TEST")
if cc.String() != expected {
t.Errorf("Test Failed - Currency Code String() error expected %s but recieved %s",
t.Errorf("Test Failed - Currency Code String() error expected %s but received %s",
expected, cc)
}
}
@@ -272,7 +272,7 @@ func TestCodeLower(t *testing.T) {
expected := "test"
cc := NewCode("TEST")
if cc.Lower().String() != expected {
t.Errorf("Test Failed - Currency Code Lower() error expected %s but recieved %s",
t.Errorf("Test Failed - Currency Code Lower() error expected %s but received %s",
expected,
cc.Lower())
}
@@ -282,7 +282,7 @@ func TestCodeUpper(t *testing.T) {
expected := "TEST"
cc := NewCode("test")
if cc.Upper().String() != expected {
t.Errorf("Test Failed - Currency Code Upper() error expected %s but recieved %s",
t.Errorf("Test Failed - Currency Code Upper() error expected %s but received %s",
expected,
cc.Upper())
}
@@ -307,7 +307,7 @@ func TestCodeUnmarshalJSON(t *testing.T) {
}
if unmarshalHere.String() != expected {
t.Errorf("Test Failed - Currency Code Upper() error expected %s but recieved %s",
t.Errorf("Test Failed - Currency Code Upper() error expected %s but received %s",
expected,
unmarshalHere)
}
@@ -328,7 +328,7 @@ func TestCodeMarshalJSON(t *testing.T) {
}
if string(encoded) != expectedJSON {
t.Errorf("Test Failed - Currency Code Upper() error expected %s but recieved %s",
t.Errorf("Test Failed - Currency Code Upper() error expected %s but received %s",
expectedJSON,
string(encoded))
}
@@ -346,7 +346,7 @@ func TestCodeMarshalJSON(t *testing.T) {
newExpectedJSON := `{"sweetCodes":""}`
if string(encoded) != newExpectedJSON {
t.Errorf("Test Failed - Currency Code Upper() error expected %s but recieved %s",
t.Errorf("Test Failed - Currency Code Upper() error expected %s but received %s",
newExpectedJSON, string(encoded))
}
}
@@ -419,7 +419,7 @@ func TestItemString(t *testing.T) {
}
if newItem.String() != expected {
t.Errorf("Test Failed - Item String() error expected %s but recieved %s",
t.Errorf("Test Failed - Item String() error expected %s but received %s",
expected,
&newItem)
}

View File

@@ -1,9 +1,8 @@
package currency
import (
"strings"
"testing"
"github.com/thrasher-/gocryptotrader/common"
)
func TestNewConversionFromString(t *testing.T) {
@@ -18,7 +17,7 @@ func TestNewConversionFromString(t *testing.T) {
conv)
}
newexpected := common.StringToLower(expected)
newexpected := strings.ToLower(expected)
conv, err = NewConversionFromString(newexpected)
if err != nil {
t.Error("Test Failed - NewConversionFromString() error", err)
@@ -110,7 +109,7 @@ func TestConversionsRatesSystem(t *testing.T) {
var SuperDuperConversionSystem ConversionRates
if SuperDuperConversionSystem.HasData() {
t.Fatalf("Test Failed - HasData() error expected false but recieved %v",
t.Fatalf("Test Failed - HasData() error expected false but received %v",
SuperDuperConversionSystem.HasData())
}
@@ -151,7 +150,7 @@ func TestConversionsRatesSystem(t *testing.T) {
}
if !SuperDuperConversionSystem.HasData() {
t.Fatalf("Test Failed - HasData() error expected true but recieved %v",
t.Fatalf("Test Failed - HasData() error expected true but received %v",
SuperDuperConversionSystem.HasData())
}
@@ -162,7 +161,7 @@ func TestConversionsRatesSystem(t *testing.T) {
r := *p * 1000
expectedRate := 1396.9317581
if r != expectedRate {
t.Errorf("Test Failed - Convert() error expected %.13f but recieved %.13f",
t.Errorf("Test Failed - Convert() error expected %.13f but received %.13f",
expectedRate,
r)
}
@@ -170,7 +169,7 @@ func TestConversionsRatesSystem(t *testing.T) {
inverseR := *pi * expectedRate
expectedInverseRate := float64(1000)
if inverseR != expectedInverseRate {
t.Errorf("Test Failed - Convert() error expected %.13f but recieved %.13f",
t.Errorf("Test Failed - Convert() error expected %.13f but received %.13f",
expectedInverseRate,
inverseR)
}

View File

@@ -1,6 +1,10 @@
package currency
import "github.com/thrasher-/gocryptotrader/common"
import (
"strings"
"github.com/thrasher-/gocryptotrader/common"
)
// NewCurrenciesFromStringArray returns a Currencies object from strings
func NewCurrenciesFromStringArray(currencies []string) Currencies {
@@ -38,7 +42,7 @@ func (c Currencies) Contains(cc Code) bool {
// Join returns a comma serparated string
func (c Currencies) Join() string {
return common.JoinStrings(c.Strings(), ",")
return strings.Join(c.Strings(), ",")
}
// UnmarshalJSON comforms type to the umarshaler interface
@@ -50,7 +54,7 @@ func (c *Currencies) UnmarshalJSON(d []byte) error {
}
var allTheCurrencies Currencies
for _, data := range common.SplitStrings(configCurrencies, ",") {
for _, data := range strings.Split(configCurrencies, ",") {
allTheCurrencies = append(allTheCurrencies, NewCode(data))
}

View File

@@ -44,14 +44,14 @@ func TestUpdateBaseCurrency(t *testing.T) {
}
if GetBaseCurrency() != AUD {
t.Errorf("Test failed - GetBaseCurrency() expected %s but recieved %s",
t.Errorf("Test failed - GetBaseCurrency() expected %s but received %s",
AUD, GetBaseCurrency())
}
}
func TestGetDefaultBaseCurrency(t *testing.T) {
if GetDefaultBaseCurrency() != USD {
t.Errorf("Test failed - GetDefaultBaseCurrency() expected %s but recieved %s",
t.Errorf("Test failed - GetDefaultBaseCurrency() expected %s but received %s",
USD, GetDefaultBaseCurrency())
}
}
@@ -59,7 +59,7 @@ func TestGetDefaultBaseCurrency(t *testing.T) {
func TestGetDefaulCryptoCurrencies(t *testing.T) {
expected := Currencies{BTC, LTC, ETH, DOGE, DASH, XRP, XMR}
if !GetDefaultCryptocurrencies().Match(expected) {
t.Errorf("Test failed - GetDefaultCryptocurrencies() expected %s but recieved %s",
t.Errorf("Test failed - GetDefaultCryptocurrencies() expected %s but received %s",
expected, GetDefaultCryptocurrencies())
}
}
@@ -67,7 +67,7 @@ func TestGetDefaulCryptoCurrencies(t *testing.T) {
func TestGetDefaultFiatCurrencies(t *testing.T) {
expected := Currencies{USD, AUD, EUR, CNY}
if !GetDefaultFiatCurrencies().Match(expected) {
t.Errorf("Test failed - GetDefaultFiatCurrencies() expected %s but recieved %s",
t.Errorf("Test failed - GetDefaultFiatCurrencies() expected %s but received %s",
expected, GetDefaultFiatCurrencies())
}
}

View File

@@ -3,6 +3,7 @@ package base
import (
"errors"
"fmt"
"strings"
"sync"
"github.com/thrasher-/gocryptotrader/common"
@@ -49,7 +50,7 @@ func (p *Provider) GetNewRate(base string, currencies []string) (map[string]floa
return p.Provider.GetRates(base, "") // Zero value to get all rates
default:
return p.Provider.GetRates(base, common.JoinStrings(currencies, ","))
return p.Provider.GetRates(base, strings.Join(currencies, ","))
}
}

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"net/http"
"net/url"
"strings"
"time"
"github.com/thrasher-/gocryptotrader/common"
@@ -54,7 +55,7 @@ func (c *CurrencyConverter) Setup(config base.Settings) error {
// GetRates is a wrapper function to return rates
func (c *CurrencyConverter) GetRates(baseCurrency, symbols string) (map[string]float64, error) {
splitSymbols := common.SplitStrings(symbols, ",")
splitSymbols := strings.Split(symbols, ",")
if len(splitSymbols) == 1 {
return c.Convert(baseCurrency, symbols)
@@ -79,7 +80,7 @@ func (c *CurrencyConverter) GetRates(baseCurrency, symbols string) (map[string]f
continue
}
for k, v := range result {
rates[common.ReplaceString(k, "_", "", -1)] = v
rates[strings.Replace(k, "_", "", -1)] = v
}
}
}
@@ -98,7 +99,7 @@ func (c *CurrencyConverter) GetRates(baseCurrency, symbols string) (map[string]f
}
for k, v := range result {
rates[common.ReplaceString(k, "_", "", -1)] = v
rates[strings.Replace(k, "_", "", -1)] = v
}
return rates, nil
@@ -113,7 +114,7 @@ func (c *CurrencyConverter) ConvertMany(currencies []string) (map[string]float64
result := make(map[string]float64)
v := url.Values{}
joined := common.JoinStrings(currencies, ",")
joined := strings.Join(currencies, ",")
v.Set("q", joined)
v.Set("compact", "ultra")

View File

@@ -17,6 +17,7 @@ import (
"net/http"
"net/url"
"strconv"
"strings"
"time"
"github.com/thrasher-/gocryptotrader/common"
@@ -125,7 +126,7 @@ func (c *CurrencyLayer) GetliveData(currencies, source string) (map[string]float
func (c *CurrencyLayer) GetHistoricalData(date string, currencies []string, source string) (map[string]float64, error) {
var resp HistoricalRates
v := url.Values{}
v.Set("currencies", common.JoinStrings(currencies, ","))
v.Set("currencies", strings.Join(currencies, ","))
v.Set("source", source)
v.Set("date", date)
@@ -179,7 +180,7 @@ func (c *CurrencyLayer) QueryTimeFrame(startDate, endDate, baseCurrency string,
v.Set("start_date", startDate)
v.Set("end_date", endDate)
v.Set("base", baseCurrency)
v.Set("currencies", common.JoinStrings(currencies, ","))
v.Set("currencies", strings.Join(currencies, ","))
err := c.SendHTTPRequest(APIEndpointTimeframe, v, &resp)
if err != nil {
@@ -205,7 +206,7 @@ func (c *CurrencyLayer) QueryCurrencyChange(startDate, endDate, baseCurrency str
v.Set("start_date", startDate)
v.Set("end_date", endDate)
v.Set("base", baseCurrency)
v.Set("currencies", common.JoinStrings(currencies, ","))
v.Set("currencies", strings.Join(currencies, ","))
err := c.SendHTTPRequest(APIEndpointChange, v, &resp)
if err != nil {

View File

@@ -66,7 +66,7 @@ func cleanCurrencies(baseCurrency, symbols string) string {
}
// remove and warn about any unsupported currencies
if !common.StringContains(exchangeRatesSupportedCurrencies, x) {
if !strings.Contains(exchangeRatesSupportedCurrencies, x) {
log.Warnf("Forex provider ExchangeRatesAPI does not support currency %s, removing from forex rates query.", x)
continue
}
@@ -164,7 +164,7 @@ func (e *ExchangeRates) GetRates(baseCurrency, symbols string) (map[string]float
// GetSupportedCurrencies returns the supported currency list
func (e *ExchangeRates) GetSupportedCurrencies() ([]string, error) {
return common.SplitStrings(exchangeRatesSupportedCurrencies, ","), nil
return strings.Split(exchangeRatesSupportedCurrencies, ","), nil
}
// SendHTTPRequest sends a HTTPS request to the desired endpoint and returns the result

View File

@@ -13,6 +13,7 @@ import (
"net/http"
"net/url"
"strconv"
"strings"
"time"
"github.com/thrasher-/gocryptotrader/common"
@@ -142,7 +143,7 @@ func (f *Fixer) GetHistoricalRates(date, baseCurrency string, symbols []string)
var resp Rates
v := url.Values{}
v.Set("symbols", common.JoinStrings(symbols, ","))
v.Set("symbols", strings.Join(symbols, ","))
if baseCurrency != "" {
v.Set("base", baseCurrency)
@@ -205,7 +206,7 @@ func (f *Fixer) GetTimeSeriesData(startDate, endDate, baseCurrency string, symbo
v.Set("start_date", startDate)
v.Set("end_date", endDate)
v.Set("base", baseCurrency)
v.Set("symbols", common.JoinStrings(symbols, ","))
v.Set("symbols", strings.Join(symbols, ","))
err := f.SendOpenHTTPRequest(fixerAPITimeSeries, v, &resp)
if err != nil {
@@ -231,7 +232,7 @@ func (f *Fixer) GetFluctuationData(startDate, endDate, baseCurrency string, symb
v.Set("start_date", startDate)
v.Set("end_date", endDate)
v.Set("base", baseCurrency)
v.Set("symbols", common.JoinStrings(symbols, ","))
v.Set("symbols", strings.Join(symbols, ","))
err := f.SendOpenHTTPRequest(fixerAPIFluctuation, v, &resp)
if err != nil {

View File

@@ -14,6 +14,7 @@ import (
"net/http"
"net/url"
"strconv"
"strings"
"time"
"github.com/thrasher-/gocryptotrader/common"
@@ -126,7 +127,7 @@ func (o *OXR) GetHistoricalRates(date, baseCurrency string, symbols []string, pr
v := url.Values{}
v.Set("base", baseCurrency)
v.Set("symbols", common.JoinStrings(symbols, ","))
v.Set("symbols", strings.Join(symbols, ","))
v.Set("prettyprint", strconv.FormatBool(prettyPrint))
v.Set("show_alternative", strconv.FormatBool(showAlternative))
endpoint := fmt.Sprintf(APIEndpointHistorical, date)
@@ -156,7 +157,7 @@ func (o *OXR) GetCurrencies(showInactive, prettyPrint, showAlternative bool) (ma
// GetSupportedCurrencies returns a list of supported currencies
func (o *OXR) GetSupportedCurrencies() ([]string, error) {
return common.SplitStrings(oxrSupportedCurrencies, ","), nil
return strings.Split(oxrSupportedCurrencies, ","), nil
}
// GetTimeSeries returns historical exchange rates for a given time period,
@@ -172,7 +173,7 @@ func (o *OXR) GetTimeSeries(baseCurrency, startDate, endDate string, symbols []s
v.Set("base", baseCurrency)
v.Set("start", startDate)
v.Set("end", endDate)
v.Set("symbols", common.JoinStrings(symbols, ","))
v.Set("symbols", strings.Join(symbols, ","))
v.Set("prettyprint", strconv.FormatBool(prettyPrint))
v.Set("show_alternative", strconv.FormatBool(showAlternative))
@@ -220,7 +221,7 @@ func (o *OXR) GetOHLC(startTime, period, baseCurrency string, symbols []string,
v.Set("start_time", startTime)
v.Set("period", period)
v.Set("base", baseCurrency)
v.Set("symbols", common.JoinStrings(symbols, ","))
v.Set("symbols", strings.Join(symbols, ","))
v.Set("prettyprint", strconv.FormatBool(prettyPrint))
if err := o.SendHTTPRequest(APIEndpointOHLC, v, &resp); err != nil {

View File

@@ -2,6 +2,7 @@ package currency
import (
"math/rand"
"strings"
"github.com/thrasher-/gocryptotrader/common"
log "github.com/thrasher-/gocryptotrader/logger"
@@ -35,7 +36,7 @@ func (p Pairs) Strings() []string {
// Join returns a comma separated list of currency pairs
func (p Pairs) Join() string {
return common.JoinStrings(p.Strings(), ",")
return strings.Join(p.Strings(), ",")
}
// Format formats the pair list to the exchange format configuration
@@ -75,7 +76,7 @@ func (p *Pairs) UnmarshalJSON(d []byte) error {
}
var allThePairs Pairs
for _, data := range common.SplitStrings(pairs, ",") {
for _, data := range strings.Split(pairs, ",") {
allThePairs = append(allThePairs, NewPairFromString(data))
}

View File

@@ -4,6 +4,7 @@ import (
"encoding/json"
"errors"
"fmt"
"path/filepath"
"sync"
"time"
@@ -19,6 +20,7 @@ import (
const (
DefaultCurrencyFileDelay = 168 * time.Hour
DefaultForeignExchangeDelay = 1 * time.Minute
DefaultStorageFile = "currency.json"
)
func init() {
@@ -132,7 +134,7 @@ func (s *Storage) RunUpdater(overrides BotOverrides, settings *MainConfiguration
return errors.New("currency package runUpdater error filepath not set")
}
s.path = filePath + common.GetOSPathSlash() + "currency.json"
s.path = filepath.Join(filePath, DefaultStorageFile)
if settings.CurrencyDelay.Nanoseconds() == 0 {
s.currencyFileUpdateDelay = DefaultCurrencyFileDelay

View File

@@ -3,9 +3,9 @@ package events
import (
"errors"
"fmt"
"strings"
"time"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/communications"
"github.com/thrasher-/gocryptotrader/communications/base"
"github.com/thrasher-/gocryptotrader/config"
@@ -134,8 +134,8 @@ func GetEventCounter() (total, executed int) {
// ExecuteAction will execute the action pending on the chain
func (e *Event) ExecuteAction() bool {
if common.StringContains(e.Action, ",") {
action := common.SplitStrings(e.Action, ",")
if strings.Contains(e.Action, ",") {
action := strings.Split(e.Action, ",")
if action[0] == ActionSMSNotify {
message := fmt.Sprintf("Event triggered: %s", e.String())
if action[1] == "ALL" {
@@ -251,9 +251,9 @@ func (e *Event) CheckCondition() bool {
// IsValidEvent checks the actions to be taken and returns an error if incorrect
func IsValidEvent(exchange, item string, condition ConditionParams, action string) error {
exchange = common.StringToUpper(exchange)
item = common.StringToUpper(item)
action = common.StringToUpper(action)
exchange = strings.ToUpper(exchange)
item = strings.ToUpper(item)
action = strings.ToUpper(action)
if !IsValidExchange(exchange) {
return errExchangeDisabled
@@ -279,8 +279,8 @@ func IsValidEvent(exchange, item string, condition ConditionParams, action strin
}
}
if common.StringContains(action, ",") {
a := common.SplitStrings(action, ",")
if strings.Contains(action, ",") {
a := strings.Split(action, ",")
if a[0] != ActionSMSNotify {
return errInvalidAction
@@ -326,10 +326,10 @@ func EventManger() {
// IsValidExchange validates the exchange
func IsValidExchange(exchangeName string) bool {
exchangeName = common.StringToLower(exchangeName)
exchangeName = strings.ToLower(exchangeName)
cfg := config.GetConfig()
for x := range cfg.Exchanges {
if common.StringToLower(cfg.Exchanges[x].Name) == exchangeName && cfg.Exchanges[x].Enabled {
if strings.ToLower(cfg.Exchanges[x].Name) == exchangeName && cfg.Exchanges[x].Enabled {
return true
}
}
@@ -347,7 +347,7 @@ func IsValidCondition(condition string) bool {
// IsValidAction validates passed in action
func IsValidAction(action string) bool {
action = common.StringToUpper(action)
action = strings.ToUpper(action)
switch action {
case ActionSMSNotify, ActionConsolePrint, ActionTest:
return true
@@ -357,7 +357,7 @@ func IsValidAction(action string) bool {
// IsValidItem validates passed in Item
func IsValidItem(item string) bool {
item = common.StringToUpper(item)
item = strings.ToUpper(item)
switch item {
case ItemPrice, ItemOrderbook:
return true

View File

@@ -121,7 +121,7 @@ func UnloadExchange(name string) error {
// LoadExchange loads an exchange by name
func LoadExchange(name string, useWG bool, wg *sync.WaitGroup) error {
nameLower := common.StringToLower(name)
nameLower := strings.ToLower(name)
var exch exchange.IBotExchange
if len(Bot.Exchanges) > 0 {

View File

@@ -5,6 +5,7 @@ import (
"net/http"
_ "net/http/pprof" // blank import required for pprof
"strconv"
"strings"
"time"
"github.com/gorilla/mux"
@@ -64,7 +65,7 @@ func newRouter(isREST bool) *mux.Router {
if common.ExtractPort(listenAddr) == 80 {
listenAddr = common.ExtractHost(listenAddr)
} else {
listenAddr = common.JoinStrings([]string{common.ExtractHost(listenAddr),
listenAddr = strings.Join([]string{common.ExtractHost(listenAddr),
strconv.Itoa(common.ExtractPort(listenAddr))}, ":")
}

View File

@@ -3,6 +3,7 @@ package engine
import (
"errors"
"fmt"
"strings"
"sync"
"time"
@@ -398,7 +399,7 @@ func WebsocketDataHandler(ws *exchange.Websocket) {
case error:
switch {
case common.StringContains(d.Error(), "close 1006"):
case strings.Contains(d.Error(), "close 1006"):
go ws.WebsocketReset()
continue
default:

View File

@@ -7,6 +7,7 @@ import (
"net"
"net/http"
"path/filepath"
"strings"
"time"
grpcauth "github.com/grpc-ecosystem/go-grpc-middleware/auth"
@@ -41,17 +42,17 @@ func authenticateClient(ctx context.Context) (context.Context, error) {
return ctx, fmt.Errorf("authorization header missing")
}
if !common.StringContains(authStr[0], "Basic") {
if !strings.Contains(authStr[0], "Basic") {
return ctx, fmt.Errorf("basic not found in authorization header")
}
decoded, err := crypto.Base64Decode(common.SplitStrings(authStr[0], " ")[1])
decoded, err := crypto.Base64Decode(strings.Split(authStr[0], " ")[1])
if err != nil {
return ctx, fmt.Errorf("unable to base64 decode authorization header")
}
username := common.SplitStrings(string(decoded), ":")[0]
password := common.SplitStrings(string(decoded), ":")[1]
username := strings.Split(string(decoded), ":")[0]
password := strings.Split(string(decoded), ":")[1]
if username != Bot.Config.RemoteControl.Username || password != Bot.Config.RemoteControl.Password {
return ctx, fmt.Errorf("username/password mismatch")
@@ -159,7 +160,7 @@ func (s *RPCServer) GetInfo(ctx context.Context, r *gctrpc.GetInfoRequest) (*gct
// GetExchanges returns a list of exchanges
// Param is whether or not you wish to list enabled exchanges
func (s *RPCServer) GetExchanges(ctx context.Context, r *gctrpc.GetExchangesRequest) (*gctrpc.GetExchangesResponse, error) {
exchanges := common.JoinStrings(GetExchanges(r.Enabled), ",")
exchanges := strings.Join(GetExchanges(r.Enabled), ",")
return &gctrpc.GetExchangesResponse{Exchanges: exchanges}, nil
}
@@ -190,13 +191,13 @@ func (s *RPCServer) GetExchangeInfo(ctx context.Context, r *gctrpc.GenericExchan
HttpTimeout: exchCfg.HTTPTimeout.String(),
HttpUseragent: exchCfg.HTTPUserAgent,
HttpProxy: exchCfg.ProxyAddress,
BaseCurrencies: common.JoinStrings(exchCfg.BaseCurrencies.Strings(), ","),
BaseCurrencies: strings.Join(exchCfg.BaseCurrencies.Strings(), ","),
SupportedAssets: exchCfg.CurrencyPairs.AssetTypes.JoinToString(","),
// TO-DO fix pairs
//EnabledPairs: common.JoinStrings(
//EnabledPairs: strings.Join(
// exchCfg.CurrencyPairs.Pairs.GetPairs().Enabled.Strings(), ","),
//AvailablePairs: common.JoinStrings(
//AvailablePairs: strings.Join(
// exchCfg.CurrencyPairs.Spot.Available.Strings(), ","),
}, nil
}

View File

@@ -3,6 +3,7 @@ package engine
import (
"errors"
"net/http"
"strings"
"github.com/gorilla/websocket"
"github.com/thrasher-/gocryptotrader/common"
@@ -122,7 +123,7 @@ func (c *WebsocketClient) read() {
break
}
req := common.StringToLower(evt.Event)
req := strings.ToLower(evt.Event)
log.Debugf("websocket: request received: %s", req)
result, ok := wsHandlers[req]

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"net/http"
"strconv"
"strings"
"github.com/gorilla/websocket"
"github.com/thrasher-/gocryptotrader/common"
@@ -534,7 +535,7 @@ func (a *Alphapoint) SendAuthenticatedHTTPRequest(method, path string, data map[
hmac := crypto.GetHMAC(crypto.HashSHA256,
[]byte(n.String()+a.API.Credentials.ClientID+a.API.Credentials.Key),
[]byte(a.API.Credentials.Secret))
data["apiSig"] = common.StringToUpper(crypto.HexEncodeToString(hmac))
data["apiSig"] = strings.ToUpper(crypto.HexEncodeToString(hmac))
path = fmt.Sprintf("%s/ajax/v%s/%s", a.API.Endpoints.URL, alphapointAPIVersion, path)
PayloadJSON, err := common.JSONEncode(data)

View File

@@ -2,8 +2,6 @@ package assets
import (
"strings"
"github.com/thrasher-/gocryptotrader/common"
)
// AssetType stores the asset type
@@ -93,7 +91,7 @@ func IsValid(input AssetType) bool {
// New takes an input of asset types as string and returns an AssetTypes
// array
func New(input string) AssetTypes {
if !common.StringContains(input, ",") {
if !strings.Contains(input, ",") {
if IsValid(AssetType(input)) {
return AssetTypes{
AssetType(input),

View File

@@ -8,6 +8,7 @@ import (
"net/http"
"net/url"
"strconv"
"strings"
"time"
"github.com/gorilla/websocket"
@@ -92,7 +93,7 @@ func (b *Binance) GetOrderBook(obd OrderBookDataRequestParams) (OrderBook, error
}
params := url.Values{}
params.Set("symbol", common.StringToUpper(obd.Symbol))
params.Set("symbol", strings.ToUpper(obd.Symbol))
params.Set("limit", fmt.Sprintf("%d", obd.Limit))
path := fmt.Sprintf("%s%s?%s", b.API.Endpoints.URL, orderBookDepth, params.Encode())
@@ -143,7 +144,7 @@ func (b *Binance) GetRecentTrades(rtr RecentTradeRequestParams) ([]RecentTrade,
var resp []RecentTrade
params := url.Values{}
params.Set("symbol", common.StringToUpper(rtr.Symbol))
params.Set("symbol", strings.ToUpper(rtr.Symbol))
params.Set("limit", fmt.Sprintf("%d", rtr.Limit))
path := fmt.Sprintf("%s%s?%s", b.API.Endpoints.URL, recentTrades, params.Encode())
@@ -164,7 +165,7 @@ func (b *Binance) GetHistoricalTrades(symbol string, limit int, fromID int64) ([
}
params := url.Values{}
params.Set("symbol", common.StringToUpper(symbol))
params.Set("symbol", strings.ToUpper(symbol))
params.Set("limit", strconv.Itoa(limit))
params.Set("fromid", strconv.FormatInt(fromID, 10))
@@ -185,7 +186,7 @@ func (b *Binance) GetAggregatedTrades(symbol string, limit int) ([]AggregatedTra
}
params := url.Values{}
params.Set("symbol", common.StringToUpper(symbol))
params.Set("symbol", strings.ToUpper(symbol))
params.Set("limit", strconv.Itoa(limit))
path := fmt.Sprintf("%s%s?%s", b.API.Endpoints.URL, aggregatedTrades, params.Encode())
@@ -263,7 +264,7 @@ func (b *Binance) GetSpotKline(arg KlinesRequestParams) ([]CandleStick, error) {
func (b *Binance) GetAveragePrice(symbol string) (AveragePrice, error) {
resp := AveragePrice{}
params := url.Values{}
params.Set("symbol", common.StringToUpper(symbol))
params.Set("symbol", strings.ToUpper(symbol))
path := fmt.Sprintf("%s%s?%s", b.API.Endpoints.URL, averagePrice, params.Encode())
@@ -276,7 +277,7 @@ func (b *Binance) GetAveragePrice(symbol string) (AveragePrice, error) {
func (b *Binance) GetPriceChangeStats(symbol string) (PriceChangeStats, error) {
resp := PriceChangeStats{}
params := url.Values{}
params.Set("symbol", common.StringToUpper(symbol))
params.Set("symbol", strings.ToUpper(symbol))
path := fmt.Sprintf("%s%s?%s", b.API.Endpoints.URL, priceChange, params.Encode())
@@ -296,7 +297,7 @@ func (b *Binance) GetTickers() ([]PriceChangeStats, error) {
func (b *Binance) GetLatestSpotPrice(symbol string) (SymbolPrice, error) {
resp := SymbolPrice{}
params := url.Values{}
params.Set("symbol", common.StringToUpper(symbol))
params.Set("symbol", strings.ToUpper(symbol))
path := fmt.Sprintf("%s%s?%s", b.API.Endpoints.URL, symbolPrice, params.Encode())
@@ -309,7 +310,7 @@ func (b *Binance) GetLatestSpotPrice(symbol string) (SymbolPrice, error) {
func (b *Binance) GetBestPrice(symbol string) (BestPrice, error) {
resp := BestPrice{}
params := url.Values{}
params.Set("symbol", common.StringToUpper(symbol))
params.Set("symbol", strings.ToUpper(symbol))
path := fmt.Sprintf("%s%s?%s", b.API.Endpoints.URL, bestPrice, params.Encode())
@@ -391,7 +392,7 @@ func (b *Binance) OpenOrders(symbol string) ([]QueryOrderData, error) {
params := url.Values{}
if symbol != "" {
params.Set("symbol", common.StringToUpper(symbol))
params.Set("symbol", strings.ToUpper(symbol))
}
if err := b.SendAuthHTTPRequest(http.MethodGet, path, params, &resp); err != nil {
@@ -410,7 +411,7 @@ func (b *Binance) AllOrders(symbol, orderID, limit string) ([]QueryOrderData, er
path := fmt.Sprintf("%s%s", b.API.Endpoints.URL, allOrders)
params := url.Values{}
params.Set("symbol", common.StringToUpper(symbol))
params.Set("symbol", strings.ToUpper(symbol))
if orderID != "" {
params.Set("orderId", orderID)
}
@@ -431,7 +432,7 @@ func (b *Binance) QueryOrder(symbol, origClientOrderID string, orderID int64) (Q
path := fmt.Sprintf("%s%s", b.API.Endpoints.URL, queryOrder)
params := url.Values{}
params.Set("symbol", common.StringToUpper(symbol))
params.Set("symbol", strings.ToUpper(symbol))
if origClientOrderID != "" {
params.Set("origClientOrderId", origClientOrderID)
}

View File

@@ -170,7 +170,7 @@ func (b *Bitfinex) UpdateTicker(p currency.Pair, assetType assets.AssetType) (ti
pairs = append(pairs, "t"+enabledPairs[x].String())
}
tickerNew, err := b.GetTickersV2(common.JoinStrings(pairs, ","))
tickerNew, err := b.GetTickersV2(strings.Join(pairs, ","))
if err != nil {
return tickerPrice, err
}

View File

@@ -2,6 +2,7 @@ package bitflyer
import (
"errors"
"strings"
"sync"
"time"
@@ -136,7 +137,7 @@ func (b *Bitflyer) FetchTradablePairs(assetType assets.AssetType) ([]string, err
for _, info := range pairs {
if info.Alias != "" && assetType == assets.AssetTypeFutures {
products = append(products, info.Alias)
} else if info.Alias == "" && assetType == assets.AssetTypeSpot && common.StringContains(info.ProductCode, "_") {
} else if info.Alias == "" && assetType == assets.AssetTypeSpot && strings.Contains(info.ProductCode, "_") {
products = append(products, info.ProductCode)
}
}
@@ -198,7 +199,7 @@ func (b *Bitflyer) FetchTicker(p currency.Pair, assetType assets.AssetType) (tic
// CheckFXString upgrades currency pair if needed
func (b *Bitflyer) CheckFXString(p currency.Pair) currency.Pair {
if common.StringContains(p.Base.String(), "FX") {
if strings.Contains(p.Base.String(), "FX") {
p.Base = currency.FX_BTC
return p
}

View File

@@ -9,6 +9,7 @@ import (
"net/url"
"reflect"
"strconv"
"strings"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/common/crypto"
@@ -74,7 +75,7 @@ func (b *Bithumb) GetTradablePairs() ([]string, error) {
// symbol e.g. "btc"
func (b *Bithumb) GetTicker(symbol string) (Ticker, error) {
response := Ticker{}
path := fmt.Sprintf("%s%s%s", b.API.Endpoints.URL, publicTicker, common.StringToUpper(symbol))
path := fmt.Sprintf("%s%s%s", b.API.Endpoints.URL, publicTicker, strings.ToUpper(symbol))
err := b.SendHTTPRequest(path, &response)
if err != nil {
@@ -140,7 +141,7 @@ func (b *Bithumb) GetAllTickers() (map[string]Ticker, error) {
// symbol e.g. "btc"
func (b *Bithumb) GetOrderBook(symbol string) (Orderbook, error) {
response := Orderbook{}
path := fmt.Sprintf("%s%s%s", b.API.Endpoints.URL, publicOrderBook, common.StringToUpper(symbol))
path := fmt.Sprintf("%s%s%s", b.API.Endpoints.URL, publicOrderBook, strings.ToUpper(symbol))
err := b.SendHTTPRequest(path, &response)
if err != nil {
@@ -159,7 +160,7 @@ func (b *Bithumb) GetOrderBook(symbol string) (Orderbook, error) {
// symbol e.g. "btc"
func (b *Bithumb) GetTransactionHistory(symbol string) (TransactionHistory, error) {
response := TransactionHistory{}
path := fmt.Sprintf("%s%s%s", b.API.Endpoints.URL, publicTransactionHistory, common.StringToUpper(symbol))
path := fmt.Sprintf("%s%s%s", b.API.Endpoints.URL, publicTransactionHistory, strings.ToUpper(symbol))
err := b.SendHTTPRequest(path, &response)
if err != nil {
@@ -210,7 +211,7 @@ func (b *Bithumb) GetAccountBalance(c string) (FullBalance, error) {
// Added due to increasing of the usuable currencies on exchange, usually
// without notificatation, so we dont need to update structs later on
for tag, datum := range response.Data {
splitTag := common.SplitStrings(tag, "_")
splitTag := strings.Split(tag, "_")
c := splitTag[len(splitTag)-1]
var val float64
if reflect.TypeOf(datum).String() != "float64" {
@@ -253,7 +254,7 @@ func (b *Bithumb) GetAccountBalance(c string) (FullBalance, error) {
func (b *Bithumb) GetWalletAddress(currency string) (WalletAddressRes, error) {
response := WalletAddressRes{}
params := url.Values{}
params.Set("currency", common.StringToUpper(currency))
params.Set("currency", strings.ToUpper(currency))
err := b.SendAuthenticatedHTTPRequest(privateWalletAdd, params, &response)
if err != nil {
@@ -305,7 +306,7 @@ func (b *Bithumb) GetOrders(orderID, transactionType, count, after, currency str
}
if len(currency) > 0 {
params.Set("currency", common.StringToUpper(currency))
params.Set("currency", strings.ToUpper(currency))
}
return response,
@@ -331,9 +332,9 @@ func (b *Bithumb) PlaceTrade(orderCurrency, transactionType string, units float6
response := OrderPlace{}
params := url.Values{}
params.Set("order_currency", common.StringToUpper(orderCurrency))
params.Set("order_currency", strings.ToUpper(orderCurrency))
params.Set("Payment_currency", "KRW")
params.Set("type", common.StringToUpper(transactionType))
params.Set("type", strings.ToUpper(transactionType))
params.Set("units", strconv.FormatFloat(units, 'f', -1, 64))
params.Set("price", strconv.FormatInt(price, 10))
@@ -346,9 +347,9 @@ func (b *Bithumb) ModifyTrade(orderID, orderCurrency, transactionType string, un
response := OrderPlace{}
params := url.Values{}
params.Set("order_currency", common.StringToUpper(orderCurrency))
params.Set("order_currency", strings.ToUpper(orderCurrency))
params.Set("Payment_currency", "KRW")
params.Set("type", common.StringToUpper(transactionType))
params.Set("type", strings.ToUpper(transactionType))
params.Set("units", strconv.FormatFloat(units, 'f', -1, 64))
params.Set("price", strconv.FormatInt(price, 10))
params.Set("order_id", orderID)
@@ -367,9 +368,9 @@ func (b *Bithumb) GetOrderDetails(orderID, transactionType, currency string) (Or
response := OrderDetails{}
params := url.Values{}
params.Set("order_id", common.StringToUpper(orderID))
params.Set("order_id", strings.ToUpper(orderID))
params.Set("type", transactionType)
params.Set("currency", common.StringToUpper(currency))
params.Set("currency", strings.ToUpper(currency))
return response,
b.SendAuthenticatedHTTPRequest(privateOrderDetail, params, &response)
@@ -384,9 +385,9 @@ func (b *Bithumb) CancelTrade(transactionType, orderID, currency string) (Action
response := ActionStatus{}
params := url.Values{}
params.Set("order_id", common.StringToUpper(orderID))
params.Set("type", common.StringToUpper(transactionType))
params.Set("currency", common.StringToUpper(currency))
params.Set("order_id", strings.ToUpper(orderID))
params.Set("type", strings.ToUpper(transactionType))
params.Set("currency", strings.ToUpper(currency))
return response,
b.SendAuthenticatedHTTPRequest(privateCancelTrade, nil, &response)
@@ -408,7 +409,7 @@ func (b *Bithumb) WithdrawCrypto(address, destination, currency string, units fl
if len(destination) > 0 {
params.Set("destination", destination)
}
params.Set("currency", common.StringToUpper(currency))
params.Set("currency", strings.ToUpper(currency))
params.Set("units", strconv.FormatFloat(units, 'f', -1, 64))
return response,
@@ -450,7 +451,7 @@ func (b *Bithumb) MarketBuyOrder(currency string, units float64) (MarketBuy, err
response := MarketBuy{}
params := url.Values{}
params.Set("currency", common.StringToUpper(currency))
params.Set("currency", strings.ToUpper(currency))
params.Set("units", strconv.FormatFloat(units, 'f', -1, 64))
return response,
@@ -466,7 +467,7 @@ func (b *Bithumb) MarketSellOrder(currency string, units float64) (MarketSell, e
response := MarketSell{}
params := url.Values{}
params.Set("currency", common.StringToUpper(currency))
params.Set("currency", strings.ToUpper(currency))
params.Set("units", strconv.FormatFloat(units, 'f', -1, 64))
return response,

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"math"
"strconv"
"strings"
"sync"
"time"
@@ -301,7 +302,7 @@ func (b *Bithumb) SubmitOrder(p currency.Pair, side exchange.OrderSide, _ exchan
func (b *Bithumb) ModifyOrder(action *exchange.ModifyOrder) (string, error) {
order, err := b.ModifyTrade(action.OrderID,
action.CurrencyPair.Base.String(),
common.StringToLower(action.OrderSide.ToString()),
strings.ToLower(action.OrderSide.ToString()),
action.Amount,
int64(action.Price))

View File

@@ -5,6 +5,7 @@ import (
"net/url"
"reflect"
"strconv"
"strings"
"github.com/thrasher-/gocryptotrader/common"
)
@@ -35,7 +36,7 @@ func StructValsToURLVals(v interface{}) (url.Values, error) {
if structType.Field(i).Tag != "" {
jsonTag := structType.Field(i).Tag.Get("json")
if jsonTag != "" {
split := common.SplitStrings(jsonTag, ",")
split := strings.Split(jsonTag, ",")
outgoingTag = split[0]
}
}

View File

@@ -6,6 +6,7 @@ import (
"net/http"
"net/url"
"strconv"
"strings"
"time"
"github.com/gorilla/websocket"
@@ -152,12 +153,12 @@ func (b *Bitmex) wsHandleIncomingData() {
}
message := string(resp.Raw)
if common.StringContains(message, "pong") {
if strings.Contains(message, "pong") {
pongChan <- 1
continue
}
if common.StringContains(message, "ping") {
if strings.Contains(message, "ping") {
err = b.wsSend("pong")
if err != nil {
b.Websocket.DataHandler <- err

View File

@@ -157,7 +157,7 @@ func (b *Bitstamp) GetTicker(currency string, hourly bool) (Ticker, error) {
b.API.Endpoints.URL,
bitstampAPIVersion,
tickerEndpoint,
common.StringToLower(currency),
strings.ToLower(currency),
)
return response, b.SendHTTPRequest(path, &response)
}
@@ -178,7 +178,7 @@ func (b *Bitstamp) GetOrderbook(currency string) (Orderbook, error) {
b.API.Endpoints.URL,
bitstampAPIVersion,
bitstampAPIOrderbook,
common.StringToLower(currency),
strings.ToLower(currency),
)
err := b.SendHTTPRequest(path, &resp)
@@ -244,7 +244,7 @@ func (b *Bitstamp) GetTransactions(currencyPair string, values url.Values) ([]Tr
b.API.Endpoints.URL,
bitstampAPIVersion,
bitstampAPITransactions,
common.StringToLower(currencyPair),
strings.ToLower(currencyPair),
),
values,
)
@@ -339,7 +339,7 @@ func (b *Bitstamp) GetUserTransactions(currencyPair string) ([]UserTransactions,
func (b *Bitstamp) GetOpenOrders(currencyPair string) ([]Order, error) {
var resp []Order
path := fmt.Sprintf(
"%s/%s", bitstampAPIOpenOrders, common.StringToLower(currencyPair),
"%s/%s", bitstampAPIOpenOrders, strings.ToLower(currencyPair),
)
return resp, b.SendAuthenticatedHTTPRequest(path, true, nil, &resp)
@@ -385,10 +385,10 @@ func (b *Bitstamp) PlaceOrder(currencyPair string, price, amount float64, buy, m
orderType = exchange.SellOrderSide.ToLower().ToString()
}
path := fmt.Sprintf("%s/%s", orderType, common.StringToLower(currencyPair))
path := fmt.Sprintf("%s/%s", orderType, strings.ToLower(currencyPair))
if market {
path = fmt.Sprintf("%s/%s/%s", orderType, bitstampAPIMarket, common.StringToLower(currencyPair))
path = fmt.Sprintf("%s/%s/%s", orderType, bitstampAPIMarket, strings.ToLower(currencyPair))
}
return response,
@@ -428,7 +428,7 @@ func (b *Bitstamp) CryptoWithdrawal(amount float64, address, symbol, destTag str
resp := CryptoWithdrawalResponse{}
var endpoint string
switch common.StringToLower(symbol) {
switch strings.ToLower(symbol) {
case "btc":
if instant {
req.Add("instant", "1")
@@ -586,7 +586,7 @@ func (b *Bitstamp) SendAuthenticatedHTTPRequest(path string, v2 bool, values url
hmac := crypto.GetHMAC(crypto.HashSHA256,
[]byte(n+b.API.Credentials.ClientID+b.API.Credentials.Key),
[]byte(b.API.Credentials.Secret))
values.Set("signature", common.StringToUpper(crypto.HexEncodeToString(hmac)))
values.Set("signature", strings.ToUpper(crypto.HexEncodeToString(hmac)))
if v2 {
path = fmt.Sprintf("%s/v%s/%s/", b.API.Endpoints.URL, bitstampAPIVersion, path)

View File

@@ -6,6 +6,7 @@ import (
"net/http"
"net/url"
"strconv"
"strings"
"time"
"github.com/gorilla/websocket"
@@ -117,8 +118,8 @@ func (b *Bitstamp) WsHandleData() {
continue
}
currencyPair := common.SplitStrings(wsResponse.Channel, "_")
p := currency.NewPairFromString(common.StringToUpper(currencyPair[3]))
currencyPair := strings.Split(wsResponse.Channel, "_")
p := currency.NewPairFromString(strings.ToUpper(currencyPair[3]))
err = b.wsUpdateOrderbook(wsOrderBookTemp.Data, p, assets.AssetTypeSpot)
if err != nil {
@@ -135,8 +136,8 @@ func (b *Bitstamp) WsHandleData() {
continue
}
currencyPair := common.SplitStrings(wsResponse.Channel, "_")
p := currency.NewPairFromString(common.StringToUpper(currencyPair[2]))
currencyPair := strings.Split(wsResponse.Channel, "_")
p := currency.NewPairFromString(strings.ToUpper(currencyPair[2]))
b.Websocket.DataHandler <- exchange.TradeData{
Price: wsTradeTemp.Data.Price,

View File

@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"strconv"
"strings"
"sync"
"time"
@@ -155,7 +156,7 @@ func (b *Bitstamp) FetchTradablePairs(asset assets.AssetType) ([]string, error)
continue
}
pair := common.SplitStrings(pairs[x].Name, "/")
pair := strings.Split(pairs[x].Name, "/")
products = append(products, pair[0]+pair[1])
}

View File

@@ -6,8 +6,8 @@ import (
"net/http"
"net/url"
"strconv"
"strings"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/common/crypto"
"github.com/thrasher-/gocryptotrader/currency"
exchange "github.com/thrasher-/gocryptotrader/exchanges"
@@ -96,7 +96,7 @@ func (b *Bittrex) GetCurrencies() (Currency, error) {
func (b *Bittrex) GetTicker(currencyPair string) (Ticker, error) {
tick := Ticker{}
path := fmt.Sprintf("%s/%s?market=%s", b.API.Endpoints.URL, bittrexAPIGetTicker,
common.StringToUpper(currencyPair),
strings.ToUpper(currencyPair),
)
if err := b.SendHTTPRequest(path, &tick); err != nil {
@@ -130,7 +130,7 @@ func (b *Bittrex) GetMarketSummaries() (MarketSummary, error) {
func (b *Bittrex) GetMarketSummary(currencyPair string) (MarketSummary, error) {
var summary MarketSummary
path := fmt.Sprintf("%s/%s?market=%s", b.API.Endpoints.URL,
bittrexAPIGetMarketSummary, common.StringToLower(currencyPair),
bittrexAPIGetMarketSummary, strings.ToLower(currencyPair),
)
if err := b.SendHTTPRequest(path, &summary); err != nil {
@@ -153,7 +153,7 @@ func (b *Bittrex) GetMarketSummary(currencyPair string) (MarketSummary, error) {
func (b *Bittrex) GetOrderbook(currencyPair string) (OrderBooks, error) {
var orderbooks OrderBooks
path := fmt.Sprintf("%s/%s?market=%s&type=both&depth=50", b.API.Endpoints.URL,
bittrexAPIGetOrderbook, common.StringToUpper(currencyPair),
bittrexAPIGetOrderbook, strings.ToUpper(currencyPair),
)
if err := b.SendHTTPRequest(path, &orderbooks); err != nil {
@@ -171,7 +171,7 @@ func (b *Bittrex) GetOrderbook(currencyPair string) (OrderBooks, error) {
func (b *Bittrex) GetMarketHistory(currencyPair string) (MarketHistory, error) {
var marketHistoriae MarketHistory
path := fmt.Sprintf("%s/%s?market=%s", b.API.Endpoints.URL,
bittrexAPIGetMarketHistory, common.StringToUpper(currencyPair),
bittrexAPIGetMarketHistory, strings.ToUpper(currencyPair),
)
if err := b.SendHTTPRequest(path, &marketHistoriae); err != nil {

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"net/http"
"net/url"
"strings"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/common/crypto"
@@ -75,8 +76,8 @@ func (b *BTCMarkets) GetTicker(firstPair, secondPair string) (Ticker, error) {
tick := Ticker{}
path := fmt.Sprintf("%s/market/%s/%s/tick",
b.API.Endpoints.URL,
common.StringToUpper(firstPair),
common.StringToUpper(secondPair))
strings.ToUpper(firstPair),
strings.ToUpper(secondPair))
return tick, b.SendHTTPRequest(path, &tick)
}
@@ -87,8 +88,8 @@ func (b *BTCMarkets) GetOrderbook(firstPair, secondPair string) (Orderbook, erro
orderbook := Orderbook{}
path := fmt.Sprintf("%s/market/%s/%s/orderbook",
b.API.Endpoints.URL,
common.StringToUpper(firstPair),
common.StringToUpper(secondPair))
strings.ToUpper(firstPair),
strings.ToUpper(secondPair))
return orderbook, b.SendHTTPRequest(path, &orderbook)
}
@@ -99,8 +100,8 @@ func (b *BTCMarkets) GetOrderbook(firstPair, secondPair string) (Orderbook, erro
func (b *BTCMarkets) GetTrades(firstPair, secondPair string, values url.Values) ([]Trade, error) {
var trades []Trade
path := common.EncodeURLValues(fmt.Sprintf("%s/market/%s/%s/trades",
b.API.Endpoints.URL, common.StringToUpper(firstPair),
common.StringToUpper(secondPair)), values)
b.API.Endpoints.URL, strings.ToUpper(firstPair),
strings.ToUpper(secondPair)), values)
return trades, b.SendHTTPRequest(path, &trades)
}
@@ -118,8 +119,8 @@ func (b *BTCMarkets) NewOrder(instrument, currency string, price, amount float64
newVolume := int64(amount * float64(common.SatoshisPerBTC))
order := OrderToGo{
Currency: common.StringToUpper(currency),
Instrument: common.StringToUpper(instrument),
Currency: strings.ToUpper(currency),
Instrument: strings.ToUpper(instrument),
Price: newPrice,
Volume: newVolume,
OrderSide: orderSide,
@@ -172,10 +173,10 @@ func (b *BTCMarkets) GetOrders(currency, instrument string, limit, since int64,
req := make(map[string]interface{})
if currency != "" {
req["currency"] = common.StringToUpper(currency)
req["currency"] = strings.ToUpper(currency)
}
if instrument != "" {
req["instrument"] = common.StringToUpper(instrument)
req["instrument"] = strings.ToUpper(instrument)
}
if limit != 0 {
req["limit"] = limit
@@ -312,7 +313,7 @@ func (b *BTCMarkets) WithdrawCrypto(amount float64, currency, address string) (s
req := WithdrawRequestCrypto{
Amount: newAmount,
Currency: common.StringToUpper(currency),
Currency: strings.ToUpper(currency),
Address: address,
}

View File

@@ -8,7 +8,6 @@ import (
"strings"
"time"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/common/crypto"
"github.com/thrasher-/gocryptotrader/config"
"github.com/thrasher-/gocryptotrader/currency"
@@ -489,7 +488,7 @@ func (e *Base) ValidateAPICredentials() bool {
if e.API.CredentialsValidator.RequiresPEM {
if e.API.Credentials.PEMKey == "" ||
common.StringContains(e.API.Credentials.PEMKey, "JUSTADUMMY") {
strings.Contains(e.API.Credentials.PEMKey, "JUSTADUMMY") {
log.Warnf("exchange %s requires API PEM key but default/empty one set",
e.Name)
return false

View File

@@ -6,7 +6,6 @@ import (
"strings"
"time"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/config"
"github.com/thrasher-/gocryptotrader/currency"
"github.com/thrasher-/gocryptotrader/exchanges/assets"
@@ -164,7 +163,7 @@ const (
// ToLower changes the ordertype to lower case
func (o OrderType) ToLower() OrderType {
return OrderType(common.StringToLower(string(o)))
return OrderType(strings.ToLower(string(o)))
}
// ToString changes the ordertype to the exchange standard and returns a string
@@ -186,7 +185,7 @@ const (
// ToLower changes the ordertype to lower case
func (o OrderSide) ToLower() OrderSide {
return OrderSide(common.StringToLower(string(o)))
return OrderSide(strings.ToLower(string(o)))
}
// ToString changes the ordertype to the exchange standard and returns a string

View File

@@ -238,7 +238,7 @@ func (e *EXMO) WithdrawCryptocurrency(currency, address, invoice string, amount
v.Set("currency", currency)
v.Set("address", address)
if common.StringToUpper(currency) == "XRP" {
if strings.ToUpper(currency) == "XRP" {
v.Set(invoice, invoice)
}

View File

@@ -11,6 +11,7 @@ import (
"github.com/gorilla/websocket"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/common/convert"
"github.com/thrasher-/gocryptotrader/common/crypto"
"github.com/thrasher-/gocryptotrader/currency"
exchange "github.com/thrasher-/gocryptotrader/exchanges"
@@ -214,31 +215,31 @@ func (g *Gateio) GetSpotKline(arg KlinesRequestParams) ([]*KLineResponse, error)
for _, k := range rawKlineDatas {
otString, _ := strconv.ParseFloat(k[0].(string), 64)
ot, err := common.TimeFromUnixTimestampFloat(otString)
ot, err := convert.TimeFromUnixTimestampFloat(otString)
if err != nil {
return nil, fmt.Errorf("cannot parse Kline.OpenTime. Err: %s", err)
}
_vol, err := common.FloatFromString(k[1])
_vol, err := convert.FloatFromString(k[1])
if err != nil {
return nil, fmt.Errorf("cannot parse Kline.Volume. Err: %s", err)
}
_id, err := common.FloatFromString(k[0])
_id, err := convert.FloatFromString(k[0])
if err != nil {
return nil, fmt.Errorf("cannot parse Kline.Id. Err: %s", err)
}
_close, err := common.FloatFromString(k[2])
_close, err := convert.FloatFromString(k[2])
if err != nil {
return nil, fmt.Errorf("cannot parse Kline.Close. Err: %s", err)
}
_high, err := common.FloatFromString(k[3])
_high, err := convert.FloatFromString(k[3])
if err != nil {
return nil, fmt.Errorf("cannot parse Kline.High. Err: %s", err)
}
_low, err := common.FloatFromString(k[4])
_low, err := convert.FloatFromString(k[4])
if err != nil {
return nil, fmt.Errorf("cannot parse Kline.Low. Err: %s", err)
}
_open, err := common.FloatFromString(k[5])
_open, err := convert.FloatFromString(k[5])
if err != nil {
return nil, fmt.Errorf("cannot parse Kline.Open. Err: %s", err)
}

View File

@@ -118,7 +118,7 @@ func (g *Gateio) WsHandleData() {
}
if result.Error.Code != 0 {
if common.StringContains(result.Error.Message, "authentication") {
if strings.Contains(result.Error.Message, "authentication") {
g.Websocket.DataHandler <- fmt.Errorf("%v - WebSocket authentication failed ",
g.GetName())
g.API.AuthenticatedSupport = false
@@ -170,7 +170,7 @@ func (g *Gateio) WsHandleData() {
}
switch {
case common.StringContains(result.Method, "ticker"):
case strings.Contains(result.Method, "ticker"):
var ticker WebsocketTicker
var c string
err = common.JSONDecode(result.Params[1], &ticker)
@@ -197,7 +197,7 @@ func (g *Gateio) WsHandleData() {
LowPrice: ticker.Low,
}
case common.StringContains(result.Method, "trades"):
case strings.Contains(result.Method, "trades"):
var trades []WebsocketTrade
var c string
err = common.JSONDecode(result.Params[1], &trades)
@@ -224,7 +224,7 @@ func (g *Gateio) WsHandleData() {
}
}
case common.StringContains(result.Method, "depth"):
case strings.Contains(result.Method, "depth"):
var IsSnapshot bool
var c string
var data = make(map[string][][]string)
@@ -312,7 +312,7 @@ func (g *Gateio) WsHandleData() {
Exchange: g.GetName(),
}
case common.StringContains(result.Method, "kline"):
case strings.Contains(result.Method, "kline"):
var data []interface{}
err = common.JSONDecode(result.Params[0], &data)
if err != nil {

View File

@@ -133,7 +133,7 @@ func (g *Gemini) GetTicker(currencyPair string) (Ticker, error) {
ticker.Volume.Currency, _ = strconv.ParseFloat(resp.Volume[currencyPair[0:3]].(string), 64)
if common.StringContains(currencyPair, "USD") {
if strings.Contains(currencyPair, "USD") {
ticker.Volume.USD, _ = strconv.ParseFloat(resp.Volume["USD"].(string), 64)
} else {
if resp.Volume["ETH"] != nil {
@@ -377,7 +377,7 @@ func (g *Gemini) WithdrawCrypto(address, currency string, amount float64) (Withd
req["address"] = address
req["amount"] = strconv.FormatFloat(amount, 'f', -1, 64)
err := g.SendAuthenticatedHTTPRequest(http.MethodPost, geminiWithdraw+common.StringToLower(currency), req, &response)
err := g.SendAuthenticatedHTTPRequest(http.MethodPost, geminiWithdraw+strings.ToLower(currency), req, &response)
if err != nil {
return response, err
}

View File

@@ -296,8 +296,8 @@ func (h *HitBTC) SubmitOrder(p currency.Pair, side exchange.OrderSide, orderType
response, err := h.PlaceOrder(p.String(),
price,
amount,
common.StringToLower(orderType.ToString()),
common.StringToLower(side.ToString()))
strings.ToLower(orderType.ToString()),
strings.ToLower(side.ToString()))
if response.OrderNumber > 0 {
submitOrderResponse.OrderID = fmt.Sprintf("%v", response.OrderNumber)

View File

@@ -8,6 +8,7 @@ import (
"io/ioutil"
"net/http"
"net/url"
"strings"
"time"
"github.com/gorilla/websocket"
@@ -126,7 +127,7 @@ func (h *HUOBI) WsHandleData() {
}
switch {
case common.StringContains(init.Channel, "depth"):
case strings.Contains(init.Channel, "depth"):
var depth WsDepth
err := common.JSONDecode(resp.Raw, &depth)
if err != nil {
@@ -134,11 +135,11 @@ func (h *HUOBI) WsHandleData() {
continue
}
data := common.SplitStrings(depth.Channel, ".")
data := strings.Split(depth.Channel, ".")
h.WsProcessOrderbook(&depth, data[1])
case common.StringContains(init.Channel, "kline"):
case strings.Contains(init.Channel, "kline"):
var kline WsKline
err := common.JSONDecode(resp.Raw, &kline)
if err != nil {
@@ -146,7 +147,7 @@ func (h *HUOBI) WsHandleData() {
continue
}
data := common.SplitStrings(kline.Channel, ".")
data := strings.Split(kline.Channel, ".")
h.Websocket.DataHandler <- exchange.KlineData{
Timestamp: time.Unix(0, kline.Timestamp),
@@ -160,7 +161,7 @@ func (h *HUOBI) WsHandleData() {
Volume: kline.Tick.Volume,
}
case common.StringContains(init.Channel, "trade"):
case strings.Contains(init.Channel, "trade"):
var trade WsTrade
err := common.JSONDecode(resp.Raw, &trade)
if err != nil {
@@ -168,7 +169,7 @@ func (h *HUOBI) WsHandleData() {
continue
}
data := common.SplitStrings(trade.Channel, ".")
data := strings.Split(trade.Channel, ".")
h.Websocket.DataHandler <- exchange.TradeData{
Exchange: h.GetName(),

View File

@@ -390,7 +390,7 @@ func (h *HUOBI) SubmitOrder(p currency.Pair, side exchange.OrderSide, orderType
var params = SpotNewOrderRequestParams{
Amount: amount,
Source: "api",
Symbol: common.StringToLower(p.String()),
Symbol: strings.ToLower(p.String()),
AccountID: int(accountID),
}

View File

@@ -8,6 +8,7 @@ import (
"net/http"
"net/url"
"strconv"
"strings"
"sync"
"time"
@@ -843,7 +844,7 @@ func (h *HUOBIHADAX) GetDepositWithdrawalHistory(associatedID, currency string,
vals.Set("from", associatedID)
vals.Set("size", strconv.FormatInt(size, 10))
vals.Set("currency", common.StringToLower(currency))
vals.Set("currency", strings.ToLower(currency))
err := h.SendAuthenticatedHTTPRequest(http.MethodGet,
huobiHadaxDepositAddress,

View File

@@ -8,6 +8,7 @@ import (
"io/ioutil"
"net/http"
"net/url"
"strings"
"time"
"github.com/gorilla/websocket"
@@ -129,7 +130,7 @@ func (h *HUOBIHADAX) WsHandleData() {
}
switch {
case common.StringContains(init.Channel, "depth"):
case strings.Contains(init.Channel, "depth"):
var depth WsDepth
err := common.JSONDecode(resp.Raw, &depth)
if err != nil {
@@ -137,11 +138,11 @@ func (h *HUOBIHADAX) WsHandleData() {
continue
}
data := common.SplitStrings(depth.Channel, ".")
data := strings.Split(depth.Channel, ".")
h.WsProcessOrderbook(&depth, data[1])
case common.StringContains(init.Channel, "kline"):
case strings.Contains(init.Channel, "kline"):
var kline WsKline
err := common.JSONDecode(resp.Raw, &kline)
if err != nil {
@@ -149,7 +150,7 @@ func (h *HUOBIHADAX) WsHandleData() {
continue
}
data := common.SplitStrings(kline.Channel, ".")
data := strings.Split(kline.Channel, ".")
h.Websocket.DataHandler <- exchange.KlineData{
Timestamp: time.Unix(0, kline.Timestamp),
@@ -163,7 +164,7 @@ func (h *HUOBIHADAX) WsHandleData() {
Volume: kline.Tick.Volume,
}
case common.StringContains(init.Channel, "trade"):
case strings.Contains(init.Channel, "trade"):
var trade WsTrade
err := common.JSONDecode(resp.Raw, &trade)
if err != nil {
@@ -171,7 +172,7 @@ func (h *HUOBIHADAX) WsHandleData() {
continue
}
data := common.SplitStrings(trade.Channel, ".")
data := strings.Split(trade.Channel, ".")
h.Websocket.DataHandler <- exchange.TradeData{
Exchange: h.GetName(),

View File

@@ -351,7 +351,7 @@ func (h *HUOBIHADAX) SubmitOrder(p currency.Pair, side exchange.OrderSide, order
var params = SpotNewOrderRequestParams{
Amount: amount,
Source: "api",
Symbol: common.StringToLower(p.String()),
Symbol: strings.ToLower(p.String()),
AccountID: int(accountID),
}

View File

@@ -10,7 +10,6 @@ import (
"sync"
"github.com/gorilla/websocket"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/common/crypto"
"github.com/thrasher-/gocryptotrader/currency"
exchange "github.com/thrasher-/gocryptotrader/exchanges"
@@ -751,8 +750,8 @@ func (k *Kraken) GetTradeVolume(feeinfo bool, symbol ...string) (TradeVolumeResp
func (k *Kraken) AddOrder(symbol, side, orderType string, volume, price, price2, leverage float64, args *AddOrderOptions) (AddOrderResponse, error) {
params := url.Values{
"pair": {symbol},
"type": {common.StringToLower(side)},
"ordertype": {common.StringToLower(orderType)},
"type": {strings.ToLower(side)},
"ordertype": {strings.ToLower(orderType)},
"volume": {strconv.FormatFloat(volume, 'f', -1, 64)},
}

View File

@@ -172,7 +172,7 @@ func (k *Kraken) FetchTradablePairs(asset assets.AssetType) ([]string, error) {
var products []string
for i := range pairs {
v := pairs[i]
if common.StringContains(v.Altname, ".d") {
if strings.Contains(v.Altname, ".d") {
continue
}
if v.Base[0] == 'X' {
@@ -214,8 +214,8 @@ func (k *Kraken) UpdateTicker(p currency.Pair, assetType assets.AssetType) (tick
for _, x := range pairs {
for y, z := range tickers {
if !common.StringContains(y, x.Base.Upper().String()) ||
!common.StringContains(y, x.Quote.Upper().String()) {
if !strings.Contains(y, x.Base.Upper().String()) ||
!strings.Contains(y, x.Quote.Upper().String()) {
continue
}
var tp ticker.Price

View File

@@ -52,7 +52,7 @@ func (l *LakeBTC) GetTicker() (map[string]Ticker, error) {
for k, v := range response {
var tick Ticker
key := common.StringToUpper(k)
key := strings.ToUpper(k)
if v.Ask != nil {
tick.Ask, _ = strconv.ParseFloat(v.Ask.(string), 64)
}
@@ -82,7 +82,7 @@ func (l *LakeBTC) GetOrderBook(currency string) (Orderbook, error) {
Bids [][]string `json:"bids"`
Asks [][]string `json:"asks"`
}
path := fmt.Sprintf("%s/%s?symbol=%s", l.API.Endpoints.URL, lakeBTCOrderbook, common.StringToLower(currency))
path := fmt.Sprintf("%s/%s?symbol=%s", l.API.Endpoints.URL, lakeBTCOrderbook, strings.ToLower(currency))
resp := Response{}
err := l.SendHTTPRequest(path, &resp)
if err != nil {
@@ -122,7 +122,7 @@ func (l *LakeBTC) GetOrderBook(currency string) (Orderbook, error) {
// GetTradeHistory returns the trade history for a given currency pair
func (l *LakeBTC) GetTradeHistory(currency string) ([]TradeHistory, error) {
path := fmt.Sprintf("%s/%s?symbol=%s", l.API.Endpoints.URL, lakeBTCTrades, common.StringToLower(currency))
path := fmt.Sprintf("%s/%s?symbol=%s", l.API.Endpoints.URL, lakeBTCTrades, strings.ToLower(currency))
var resp []TradeHistory
return resp, l.SendHTTPRequest(path, &resp)
}
@@ -172,7 +172,7 @@ func (l *LakeBTC) GetOrders(orders []int64) ([]Orders, error) {
var resp []Orders
return resp,
l.SendAuthenticatedHTTPRequest(lakeBTCGetOrders, common.JoinStrings(ordersStr, ","), &resp)
l.SendAuthenticatedHTTPRequest(lakeBTCGetOrders, strings.Join(ordersStr, ","), &resp)
}
// CancelExistingOrder cancels an order by ID number and returns an error
@@ -201,7 +201,7 @@ func (l *LakeBTC) CancelExistingOrders(orderIDs []string) error {
}
resp := Response{}
params := common.JoinStrings(orderIDs, ",")
params := strings.Join(orderIDs, ",")
err := l.SendAuthenticatedHTTPRequest(lakeBTCCancelOrder, params, &resp)
if err != nil {
return err
@@ -271,7 +271,7 @@ func (l *LakeBTC) SendAuthenticatedHTTPRequest(method, params string, result int
postData := make(map[string]interface{})
postData["method"] = method
postData["id"] = 1
postData["params"] = common.SplitStrings(params, ",")
postData["params"] = strings.Split(params, ",")
data, err := common.JSONEncode(postData)
if err != nil {

View File

@@ -133,7 +133,7 @@ func (l *LakeBTC) FetchTradablePairs(asset assets.AssetType) ([]string, error) {
var currencies []string
for x := range result {
currencies = append(currencies, common.StringToUpper(x))
currencies = append(currencies, strings.ToUpper(x))
}
return currencies, nil

View File

@@ -684,7 +684,7 @@ func (l *LocalBitcoins) SendAuthenticatedHTTPRequest(method, path string, params
headers := make(map[string]string)
headers["Apiauth-Key"] = l.API.Credentials.Key
headers["Apiauth-Nonce"] = n
headers["Apiauth-Signature"] = common.StringToUpper(crypto.HexEncodeToString(hmac))
headers["Apiauth-Signature"] = strings.ToUpper(crypto.HexEncodeToString(hmac))
headers["Content-Type"] = "application/x-www-form-urlencoded"
if l.Verbose {

View File

@@ -10,6 +10,7 @@ import (
"net/http"
"net/http/httputil"
"net/url"
"strings"
"sync"
"time"
@@ -327,7 +328,7 @@ func (r *Requester) DoRequest(req *http.Request, path string, body io.Reader, re
default:
switch {
case common.StringContains(resp.Header.Get("Content-Type"), "application/json"):
case strings.Contains(resp.Header.Get("Content-Type"), "application/json"):
reader = resp.Body
default:

View File

@@ -3,10 +3,10 @@ package ticker
import (
"errors"
"strconv"
"strings"
"sync"
"time"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/currency"
"github.com/thrasher-/gocryptotrader/exchanges/assets"
)
@@ -45,7 +45,7 @@ type Ticker struct {
// PriceToString returns the string version of a stored price field
func (t *Ticker) PriceToString(p currency.Pair, priceType string, tickerType assets.AssetType) string {
priceType = common.StringToLower(priceType)
priceType = strings.ToLower(priceType)
switch priceType {
case "last":

View File

@@ -389,7 +389,7 @@ func TestSubscriptionWithExistingEntry(t *testing.T) {
w.SetChannelSubscriber(placeholderSubscriber)
w.subscribeToChannels()
if len(w.subscribedChannels) != 1 {
t.Errorf("Subscription should not have occured")
t.Errorf("Subscription should not have occurred")
}
}
@@ -410,7 +410,7 @@ func TestUnsubscriptionWithExistingEntry(t *testing.T) {
w.SetChannelUnsubscriber(placeholderSubscriber)
w.unsubscribeToChannels()
if len(w.subscribedChannels) != 1 {
t.Errorf("Unsubscription should not have occured")
t.Errorf("Unsubscription should not have occurred")
}
}

View File

@@ -138,7 +138,7 @@ func (y *Yobit) FetchTradablePairs(asset assets.AssetType) ([]string, error) {
var currencies []string
for x := range info.Pairs {
currencies = append(currencies, common.StringToUpper(x))
currencies = append(currencies, strings.ToUpper(x))
}
return currencies, nil

View File

@@ -13,6 +13,7 @@ import (
"github.com/gorilla/websocket"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/common/convert"
"github.com/thrasher-/gocryptotrader/common/crypto"
"github.com/thrasher-/gocryptotrader/currency"
exchange "github.com/thrasher-/gocryptotrader/exchanges"
@@ -66,7 +67,7 @@ func (z *ZB) SpotNewOrder(arg SpotNewOrderRequestParams) (int64, error) {
return 0, err
}
if result.Code != 1000 {
return 0, fmt.Errorf("unsucessful new order, message: %s code: %d", result.Message, result.Code)
return 0, fmt.Errorf("unsuccessful new order, message: %s code: %d", result.Message, result.Code)
}
newOrderID, err := strconv.ParseInt(result.ID, 10, 64)
if err != nil {
@@ -252,7 +253,7 @@ func (z *ZB) GetSpotKline(arg KlinesRequestParams) (KLineResponse, error) {
return res, errors.New("zb rawKlines unmarshal failed")
}
for _, k := range rawKlineDatas {
ot, err := common.TimeFromUnixTimestampFloat(k[0])
ot, err := convert.TimeFromUnixTimestampFloat(k[0])
if err != nil {
return res, errors.New("zb cannot parse Kline.OpenTime")
}

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"net/http"
"net/url"
"strings"
"time"
"github.com/gorilla/websocket"
@@ -89,7 +90,7 @@ func (z *ZB) WsHandleData() {
continue
}
switch {
case common.StringContains(result.Channel, "markets"):
case strings.Contains(result.Channel, "markets"):
if !result.Success {
z.Websocket.DataHandler <- fmt.Errorf("zb_websocket.go error - unsuccessful market response %s", wsErrCodes[result.Code])
continue
@@ -102,8 +103,8 @@ func (z *ZB) WsHandleData() {
continue
}
case common.StringContains(result.Channel, "ticker"):
cPair := common.SplitStrings(result.Channel, "_")
case strings.Contains(result.Channel, "ticker"):
cPair := strings.Split(result.Channel, "_")
var ticker WsTicker
@@ -123,7 +124,7 @@ func (z *ZB) WsHandleData() {
LowPrice: ticker.Data.Low,
}
case common.StringContains(result.Channel, "depth"):
case strings.Contains(result.Channel, "depth"):
var depth WsDepth
err := common.JSONDecode(resp.Raw, &depth)
if err != nil {
@@ -149,7 +150,7 @@ func (z *ZB) WsHandleData() {
})
}
channelInfo := common.SplitStrings(result.Channel, "_")
channelInfo := strings.Split(result.Channel, "_")
cPair := currency.NewPairFromString(channelInfo[0])
var newOrderBook orderbook.Base
@@ -172,7 +173,7 @@ func (z *ZB) WsHandleData() {
Exchange: z.GetName(),
}
case common.StringContains(result.Channel, "trades"):
case strings.Contains(result.Channel, "trades"):
var trades WsTrades
err := common.JSONDecode(resp.Raw, &trades)
if err != nil {
@@ -183,7 +184,7 @@ func (z *ZB) WsHandleData() {
// Most up to date trade
t := trades.Data[len(trades.Data)-1]
channelInfo := common.SplitStrings(result.Channel, "_")
channelInfo := strings.Split(result.Channel, "_")
cPair := currency.NewPairFromString(channelInfo[0])
z.Websocket.DataHandler <- exchange.TradeData{

View File

@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"strconv"
"strings"
"sync"
"time"
@@ -179,7 +180,7 @@ func (z *ZB) UpdateTicker(p currency.Pair, assetType assets.AssetType) (ticker.P
}
for _, x := range z.GetEnabledPairs(assetType) {
currencySplit := common.SplitStrings(z.FormatExchangeCurrency(x, assetType).String(), "_")
currencySplit := strings.Split(z.FormatExchangeCurrency(x, assetType).String(), "_")
currency := currencySplit[0] + currencySplit[1]
var tp ticker.Price
tp.Pair = x
@@ -312,7 +313,7 @@ func (z *ZB) SubmitOrder(p currency.Pair, side exchange.OrderSide, _ exchange.Or
var params = SpotNewOrderRequestParams{
Amount: amount,
Price: price,
Symbol: common.StringToLower(p.String()),
Symbol: strings.ToLower(p.String()),
Type: oT,
}
response, err := z.SpotNewOrder(params)

View File

@@ -3,6 +3,7 @@ package portfolio
import (
"errors"
"fmt"
"strings"
"time"
"github.com/thrasher-/gocryptotrader/common"
@@ -182,8 +183,8 @@ func (p *Base) RemoveAddress(address, description string, coinType currency.Code
// UpdatePortfolio adds to the portfolio addresses by coin type
func (p *Base) UpdatePortfolio(addresses []string, coinType currency.Code) bool {
if common.StringContains(common.JoinStrings(addresses, ","), PortfolioAddressExchange) ||
common.StringContains(common.JoinStrings(addresses, ","), PortfolioAddressPersonal) {
if strings.Contains(strings.Join(addresses, ","), PortfolioAddressExchange) ||
strings.Contains(strings.Join(addresses, ","), PortfolioAddressPersonal) {
return true
}
@@ -224,7 +225,7 @@ func (p *Base) UpdatePortfolio(addresses []string, coinType currency.Code) bool
func (p *Base) GetPortfolioByExchange(exchangeName string) map[currency.Code]float64 {
result := make(map[currency.Code]float64)
for x := range p.Addresses {
if common.StringContains(p.Addresses[x].Address, exchangeName) {
if strings.Contains(p.Addresses[x].Address, exchangeName) {
result[p.Addresses[x].CoinType] = p.Addresses[x].Balance
}
}
@@ -380,7 +381,7 @@ func (p *Base) GetPortfolioSummary() Summary {
func (p *Base) GetPortfolioGroupedCoin() map[currency.Code][]string {
result := make(map[currency.Code][]string)
for _, x := range p.Addresses {
if common.StringContains(x.Description, PortfolioAddressExchange) {
if strings.Contains(x.Description, PortfolioAddressExchange) {
continue
}
result[x.CoinType] = append(result[x.CoinType], x.Address)

View File

@@ -2,9 +2,8 @@ package utils
import (
"errors"
"path/filepath"
"runtime"
"github.com/thrasher-/gocryptotrader/common"
)
const (
@@ -32,5 +31,5 @@ func AdjustGoMaxProcs(maxProcs int) error {
// GetTLSDir returns the default TLS dir
func GetTLSDir(dir string) string {
return dir + common.GetOSPathSlash() + defaultTLSDir
return filepath.Join(dir, defaultTLSDir)
}