mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-31 15:10:42 +00:00
* few fixes and add ratelimiter * adds test * revert configtest.json changes * configtest updated * WIP: adds public endpoint support * WIP: adds public endpoint support * adds public endpoint support * WIP: adds auth. endpoint support * adds test for auth. endpoint * fixes * adds auth. endpoint support * WIP: ws support * WIP * WIP * WIP * WIP * WIP * WIP * WIP * Testing * Complete WS spot testing * adds support for ws events * minor change * WIP: adds REST support for CoinMarginedFutures * Fixes * WIP: adds REST support for CoinMarginedFutures * Fixes * improvement in SPOT REST * Typo fix * WIP: add REST support for CMF Account API * minor fixes * WIP: add support for CMF conditional orders and few minor fixes * complete support for CMF conditional orders * adds support for public CMF endpoint * adds support for CMF position API * Complete REST CMF support * WIP * Testing REST CMF support * Testing REST CMF support * Testing REST CMF support completed * WIP: add support for UMF * completed non-auth UMF * WIP: add support for REST Auth. UMF * WIP: add support for REST Auth. UMF and some improvements * WIP * WIP * WIP * completed REST UMF * renaming * adds REST support for futures * add testcases for UMF and some optimizations * add testcases for futures * Testing UMF, futures and its changes * Fixes * Fixes after testing * WIP * WIP * WIP * completed ws USDT futures support * WIP: ws support for futures * fixes in WS futures * fixes in WS support * roll back changes made for WS CMF, USDT and Futures * fixes * WIP * WIP * fixes * Steps for new PR * WIP * WIP * WIP * WIP * complete PR setup * fixes for successfully running tests * update in symbol for futures pair in test file * WIP * Fixes in test file and other minor fix * fix testdata/configtest.json * reset CONTRIBUTORS file * review changes * remove unwanted file * remove redundant code * improvisation * adds comment for exported functions * remove unwanted TODO and commented code * fix * improvisation * fix * defined errors * improvisation * improvisation * improvisation * updates test * adds comment for exported types * review changes * review changes * fix * fixes * Changes for making BYBIT compatible with existing code base * Test file changes * Changes for making BYBIT compatible with existing code base * Changes for making BYBIT compatible with existing code base * fix lint issues * fix * review changes * review changes * review changes * review changes * review changes * review changes * review changes * review changes * review changes * review changes * WIP * add test cases for new API's * minor improvements * add missing API and their tests * minor fixes * add bybitTime * add bybitTimeSec, bybitTimeMilliSec, bybitTimeNanoSec and necessary support * fix GetTradeHistory function * error handling * test fixes * add GetServerTime API * adds GetHistoricCandlesExtended and review changes * test fixes * minor fix * integrating CMF Bybit recent change log * minor fixes * adds extractCurrencyPair * minor fixes * minor fix * review changes * adds variable declaration of error * review commit * adds embeddable type in API response for all API and integrate it * fixes * adds authentication WS connection * review changes * review changes * compatible changes * adds asset to GetWithdrawalsHistory * adds asset_type in rpc.proto * adds asset argument in gctcli withdrawal request command * improve error handling in exchange API error * web socket fix * review changes * improvements * improvements * minor fix * review changes * fixing wrapper issues * fixes * fixes * review changes * add test cases * fix for GetActiveOrders * lint fixes * fixes in websocket * adds wrapper testcases * adds wrapper testcases * adds wrapper testcases * fixes * fix issue with GetHistoricCandlesExtended * fix merge issues * improving error reporting * adds wrapper testcases and a minor fix * gctrpc changes * adds test cases fixes in websocket * review changes for ws * review changes in WS * fix gctrpc * merge fixes * review changes * WIP * updates pair in configs * adds new asset USDCMarginedFutures * adds URL const for USDCMarginedFutures * adds API support * minor fixes * adds kline API * minor fix * adds API * adds API * adds API * WIP * WIP * WIP * adds support for USDC auth requests to SendAuthHTTPRequest * adds SendUSDCAuthHTTPRequest * run test and fix them * rollback support added for Auth. USDC request inside SendAuthHTTPRequest * adds API and test cases * adds API and test cases * adds APIs and test cases * adds APIs * adds rate limit for USDC * adds USDCMarginedFutures to wrapper * adds USDC testcases in wrapper and fix few issues * minor test fixes * minor test fixes * fix lint issues * WIP * Merge changes * minor fixes * remove "else" and optimize * review changes * review changes * review changes * fix lint issue * merge fix * fix test * fix templates and run them * changes after merge * review changes and improvements * code improvement * fixes with respect to changes in API response in documentation * fixed review change in test * adds check in CancelExistingOrder * update exchange template * review changes * adds GetDepositAddress API * WIP: adds GetOrderHistory * complete GetOrderHistory * fixes * adds test case * fixes and add WithdrawFund API * WIP * WIP * updating all SendAuthHTTPRequest call * adds WithdrawCryptocurrencyFunds * update test cases * fix lint issues * fixes after merge * adds GetAvailableTransferChains and few fixes * minor fix in GetDepositAddress * minor fix with WS ping/pong handling * add ping handler for WS Auth. * fix typo mistake * update doc
206 lines
4.8 KiB
Go
206 lines
4.8 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")
|
|
)
|
|
|
|
// Item stores the asset type
|
|
type Item uint16
|
|
|
|
// Items stores a list of assets types
|
|
type Items []Item
|
|
|
|
// Const vars for asset package
|
|
const (
|
|
Empty Item = 0
|
|
Spot Item = 1 << iota
|
|
Margin
|
|
MarginFunding
|
|
Index
|
|
Binary
|
|
PerpetualContract
|
|
PerpetualSwap
|
|
Futures
|
|
UpsideProfitContract
|
|
DownsideProfitContract
|
|
CoinMarginedFutures
|
|
USDTMarginedFutures
|
|
USDCMarginedFutures
|
|
|
|
futuresFlag = PerpetualContract | PerpetualSwap | Futures | UpsideProfitContract | DownsideProfitContract | CoinMarginedFutures | USDTMarginedFutures | USDCMarginedFutures
|
|
supportedFlag = Spot | Margin | MarginFunding | Index | Binary | PerpetualContract | PerpetualSwap | Futures | UpsideProfitContract | DownsideProfitContract | CoinMarginedFutures | USDTMarginedFutures | USDCMarginedFutures
|
|
|
|
spot = "spot"
|
|
margin = "margin"
|
|
marginFunding = "marginfunding"
|
|
index = "index"
|
|
binary = "binary"
|
|
perpetualContract = "perpetualcontract"
|
|
perpetualSwap = "perpetualswap"
|
|
futures = "futures"
|
|
upsideProfitContract = "upsideprofitcontract"
|
|
downsideProfitContract = "downsideprofitcontract"
|
|
coinMarginedFutures = "coinmarginedfutures"
|
|
usdtMarginedFutures = "usdtmarginedfutures"
|
|
usdcMarginedFutures = "usdcmarginedfutures"
|
|
)
|
|
|
|
var (
|
|
supportedList = Items{Spot, Margin, MarginFunding, Index, Binary, PerpetualContract, PerpetualSwap, Futures, UpsideProfitContract, DownsideProfitContract, CoinMarginedFutures, USDTMarginedFutures, USDCMarginedFutures}
|
|
)
|
|
|
|
// Supported returns a list of supported asset types
|
|
func Supported() Items {
|
|
return supportedList
|
|
}
|
|
|
|
// returns an Item to string
|
|
func (a Item) String() string {
|
|
switch a {
|
|
case Spot:
|
|
return spot
|
|
case Margin:
|
|
return margin
|
|
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 UpsideProfitContract:
|
|
return upsideProfitContract
|
|
case DownsideProfitContract:
|
|
return downsideProfitContract
|
|
case CoinMarginedFutures:
|
|
return coinMarginedFutures
|
|
case USDTMarginedFutures:
|
|
return usdtMarginedFutures
|
|
case USDCMarginedFutures:
|
|
return usdcMarginedFutures
|
|
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 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
|
|
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
|
|
}
|