mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-18 23:16:49 +00:00
* initial concept of a nice validation tester for exchanges * adds some datahandler design * expand testing * more tests and fixes * minor end of day fix for bithumb * fixes implementation issues * more test coverage and improvements, but not sure if i should continue * fix more wrapper implementations * adds error type, more fixes * changes signature, fixes implementations * fixes more wrapper implementations * one more bit * more cleanup * WOW things work? * lintle 1/1337 * mini bump * fixes all linting * neaten * GetOrderInfo+ asset pair fixes+improvements * adds new websocket test * expand ws testing * fix bug, expand tests, improve implementation * code coverage of a lot of new codes * fixes everything * reverts accidental changes * minor fixes from reviewing code * removes Bitfinex cancelBatchOrder implementation * fixes dumb baby typo for babies * mini nit fixes * so many nits to address * addresses all the nits * Titlecase * switcheroo * removes websocket testing for now * fix appveyor, minor test fix * fixes typo, re-kindles killed kode * skip binance wrapper tests when running CI * expired context, huobi okx fixes * kodespull * fix ordering * time fix because why not * fix exmo, others * hopefully this fixes all of my life's problems * last thing today * huobi, more like hypotrophy * golangci-lint, more like mypooroldknee-splint * fix huobi times by removing them * should fix okx currency issues * blocks the application * adds last little contingency for pairs * addresses most nits and new problems * lovely fixed before seeing why okx sucks * fixes issues with okx websocket * the classic receieieivaier * lintle * adds test and fixes existing tests * expands error handling messages during setup * fixes dumb okx bugs introduced * quick fix for lint and exmo * fixes nixes * fix exmo deposit issue * lint * fixes issue with extra asset runs missing * fix surprise race * all the lint and merge fixes * fixes surprise bugs in OKx * fixes issues with times and chains * fixing all the merge stuff * merge fix * rm logs and a panic potential * lovely lint lament * an easy demonstration of scenario, but not of initial purpose * put it in the bin * Revert "put it in the bin" This reverts commit 15c6490f713233d43f10957367fcbf18e3818bdd. * re-add after immediate error popup * fix mini poor test design * okx okay * merge fixes * fixes issues discovered in lovely test * I FORGOT TO COMMIT THIS * nit fixaroonaboo * forgoetten test fix * revert old okx asset intrument work * fixes * revert problems I didnt understand. update bybit * fix merge bugs * test cleanup * further improvements * reshuffle and lint * rm redundant CI_TEST by rm the CI_TEST field that is redundant * path fix * move to its own section, dont run on 32 bit + appveyor * lint * fix lbank * address nits * let it rip * fix failing test time range * niteroo boogaloo * mod tidy, use common.SimpleTimeFormat
226 lines
5.5 KiB
Go
226 lines
5.5 KiB
Go
package asset
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
// ErrNotSupported is an error for an unsupported asset type
|
|
ErrNotSupported = errors.New("unsupported asset type")
|
|
// ErrNotEnabled returned when a supported asset type is disabled
|
|
ErrNotEnabled = errors.New("asset type disabled")
|
|
)
|
|
|
|
// Item stores the asset type
|
|
type Item uint32
|
|
|
|
// Items stores a list of assets types
|
|
type Items []Item
|
|
|
|
// Const vars for asset package
|
|
const (
|
|
Empty Item = 0
|
|
Spot Item = 1 << iota
|
|
Margin
|
|
CrossMargin
|
|
MarginFunding
|
|
Index
|
|
Binary
|
|
PerpetualContract
|
|
PerpetualSwap
|
|
Futures
|
|
DeliveryFutures
|
|
UpsideProfitContract
|
|
DownsideProfitContract
|
|
CoinMarginedFutures
|
|
USDTMarginedFutures
|
|
USDCMarginedFutures
|
|
Options
|
|
|
|
futuresFlag = PerpetualContract | PerpetualSwap | Futures | DeliveryFutures | UpsideProfitContract | DownsideProfitContract | CoinMarginedFutures | USDTMarginedFutures | USDCMarginedFutures
|
|
supportedFlag = Spot | Margin | CrossMargin | MarginFunding | Index | Binary | PerpetualContract | PerpetualSwap | Futures | DeliveryFutures | UpsideProfitContract | DownsideProfitContract | CoinMarginedFutures | USDTMarginedFutures | USDCMarginedFutures | Options
|
|
|
|
spot = "spot"
|
|
margin = "margin"
|
|
crossMargin = "cross_margin" // for Gateio exchange
|
|
marginFunding = "marginfunding"
|
|
index = "index"
|
|
binary = "binary"
|
|
perpetualContract = "perpetualcontract"
|
|
perpetualSwap = "perpetualswap"
|
|
futures = "futures"
|
|
deliveryFutures = "delivery"
|
|
upsideProfitContract = "upsideprofitcontract"
|
|
downsideProfitContract = "downsideprofitcontract"
|
|
coinMarginedFutures = "coinmarginedfutures"
|
|
usdtMarginedFutures = "usdtmarginedfutures"
|
|
usdcMarginedFutures = "usdcmarginedfutures"
|
|
options = "options"
|
|
)
|
|
|
|
var (
|
|
supportedList = Items{Spot, Margin, CrossMargin, MarginFunding, Index, Binary, PerpetualContract, PerpetualSwap, Futures, DeliveryFutures, UpsideProfitContract, DownsideProfitContract, CoinMarginedFutures, USDTMarginedFutures, USDCMarginedFutures, Options}
|
|
)
|
|
|
|
// Supported returns a list of supported asset types
|
|
func Supported() Items {
|
|
return supportedList
|
|
}
|
|
|
|
// String converts an Item to its string representation
|
|
func (a Item) String() string {
|
|
switch a {
|
|
case Spot:
|
|
return spot
|
|
case Margin:
|
|
return margin
|
|
case CrossMargin:
|
|
return crossMargin
|
|
case MarginFunding:
|
|
return marginFunding
|
|
case Index:
|
|
return index
|
|
case Binary:
|
|
return binary
|
|
case PerpetualContract:
|
|
return perpetualContract
|
|
case PerpetualSwap:
|
|
return perpetualSwap
|
|
case Futures:
|
|
return futures
|
|
case DeliveryFutures:
|
|
return deliveryFutures
|
|
case UpsideProfitContract:
|
|
return upsideProfitContract
|
|
case DownsideProfitContract:
|
|
return downsideProfitContract
|
|
case CoinMarginedFutures:
|
|
return coinMarginedFutures
|
|
case USDTMarginedFutures:
|
|
return usdtMarginedFutures
|
|
case USDCMarginedFutures:
|
|
return usdcMarginedFutures
|
|
case Options:
|
|
return options
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
// Strings converts an asset type array to a string array
|
|
func (a Items) Strings() []string {
|
|
assets := make([]string, len(a))
|
|
for x := range a {
|
|
assets[x] = a[x].String()
|
|
}
|
|
return assets
|
|
}
|
|
|
|
// Contains returns whether or not the supplied asset exists
|
|
// in the list of Items
|
|
func (a Items) Contains(i Item) bool {
|
|
if i.IsValid() {
|
|
for x := range a {
|
|
if a[x] == i {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// JoinToString joins an asset type array and converts it to a string
|
|
// with the supplied separator
|
|
func (a Items) JoinToString(separator string) string {
|
|
return strings.Join(a.Strings(), separator)
|
|
}
|
|
|
|
// IsValid returns whether or not the supplied asset type is valid or
|
|
// not
|
|
func (a Item) IsValid() bool {
|
|
return a != Empty && supportedFlag&a == a
|
|
}
|
|
|
|
// UnmarshalJSON comforms type to the umarshaler interface
|
|
func (a *Item) UnmarshalJSON(d []byte) error {
|
|
var assetString string
|
|
err := json.Unmarshal(d, &assetString)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if assetString == "" {
|
|
return nil
|
|
}
|
|
|
|
ai, err := New(assetString)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*a = ai
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON comforms type to the marshaller interface
|
|
func (a Item) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(a.String())
|
|
}
|
|
|
|
// New takes an input matches to relevant package assets
|
|
func New(input string) (Item, error) {
|
|
input = strings.ToLower(input)
|
|
switch input {
|
|
case spot:
|
|
return Spot, nil
|
|
case margin:
|
|
return Margin, nil
|
|
case marginFunding:
|
|
return MarginFunding, nil
|
|
case crossMargin:
|
|
return CrossMargin, nil
|
|
case deliveryFutures:
|
|
return DeliveryFutures, nil
|
|
case index:
|
|
return Index, nil
|
|
case binary:
|
|
return Binary, nil
|
|
case perpetualContract:
|
|
return PerpetualContract, nil
|
|
case perpetualSwap:
|
|
return PerpetualSwap, nil
|
|
case futures:
|
|
return Futures, nil
|
|
case upsideProfitContract:
|
|
return UpsideProfitContract, nil
|
|
case downsideProfitContract:
|
|
return DownsideProfitContract, nil
|
|
case coinMarginedFutures:
|
|
return CoinMarginedFutures, nil
|
|
case usdtMarginedFutures:
|
|
return USDTMarginedFutures, nil
|
|
case usdcMarginedFutures:
|
|
return USDCMarginedFutures, nil
|
|
case options, "option":
|
|
return Options, nil
|
|
default:
|
|
return 0, fmt.Errorf("%w '%v', only supports %s",
|
|
ErrNotSupported,
|
|
input,
|
|
supportedList)
|
|
}
|
|
}
|
|
|
|
// UseDefault returns default asset type
|
|
func UseDefault() Item {
|
|
return Spot
|
|
}
|
|
|
|
// IsFutures checks if the asset type is a futures contract based asset
|
|
func (a Item) IsFutures() bool {
|
|
return a != Empty && futuresFlag&a == a
|
|
}
|