85 lines
2.5 KiB
Go
85 lines
2.5 KiB
Go
|
|
package tastytrade
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"fmt"
|
||
|
|
)
|
||
|
|
|
||
|
|
type DestinationVenueSymbols struct {
|
||
|
|
Id int `json:"id"`
|
||
|
|
Symbol string `json:"symbol"`
|
||
|
|
DestinationVenue string `json:"destination-venue"`
|
||
|
|
MaxQuantityPrecision int `json:"max-quantity-precision"`
|
||
|
|
MaxPricePrecision int `json:"max-price-precision"`
|
||
|
|
Routable bool `json:"routable"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type Cryptocurrency struct {
|
||
|
|
Id int `json:"id"`
|
||
|
|
Symbol string `json:"symbol"`
|
||
|
|
InstrumentType string `json:"instrument-type"`
|
||
|
|
ShortDescription string `json:"short-description"`
|
||
|
|
Description string `json:"description"`
|
||
|
|
IsClosingOnly bool `json:"is-closing-only"`
|
||
|
|
Active bool `json:"active"`
|
||
|
|
TickSize string `json:"tick-size"`
|
||
|
|
StreamerSymbol string `json:"streamer-symbol"`
|
||
|
|
DestinationVenueSymbols []DestinationVenueSymbols `json:"destination-venue-symbols"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type ListCryptocurrenciesResult struct {
|
||
|
|
Data struct {
|
||
|
|
Items []Cryptocurrency `json:"items"`
|
||
|
|
} `json:"data"`
|
||
|
|
Context string `json:"context"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type GetCryptocurrencyResult struct {
|
||
|
|
Data Cryptocurrency `json:"data"`
|
||
|
|
Context string `json:"context"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// ListCryptocurrencies retrieves list of cryptocurrencies
|
||
|
|
func (api *TastytradeAPI) ListCryptocurrencies() (ListCryptocurrenciesResult, error) {
|
||
|
|
url := fmt.Sprintf("%s/instruments/cryptocurrencies", api.host)
|
||
|
|
data, err := api.fetchData(url)
|
||
|
|
if err != nil {
|
||
|
|
return ListCryptocurrenciesResult{}, err
|
||
|
|
}
|
||
|
|
|
||
|
|
var response ListCryptocurrenciesResult
|
||
|
|
jsonData, err := json.Marshal(data)
|
||
|
|
if err != nil {
|
||
|
|
return ListCryptocurrenciesResult{}, err
|
||
|
|
}
|
||
|
|
|
||
|
|
err = json.Unmarshal(jsonData, &response)
|
||
|
|
if err != nil {
|
||
|
|
return ListCryptocurrenciesResult{}, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return response, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetCryptocurrency retrieves a specific cryptocurrency
|
||
|
|
func (api *TastytradeAPI) GetCryptocurrency(symbol string) (GetCryptocurrencyResult, error) {
|
||
|
|
url := fmt.Sprintf("%s/instruments/cryptocurrencies/%s", api.host, symbol)
|
||
|
|
data, err := api.fetchData(url)
|
||
|
|
if err != nil {
|
||
|
|
return GetCryptocurrencyResult{}, err
|
||
|
|
}
|
||
|
|
|
||
|
|
var response GetCryptocurrencyResult
|
||
|
|
jsonData, err := json.Marshal(data)
|
||
|
|
if err != nil {
|
||
|
|
return GetCryptocurrencyResult{}, err
|
||
|
|
}
|
||
|
|
|
||
|
|
err = json.Unmarshal(jsonData, &response)
|
||
|
|
if err != nil {
|
||
|
|
return GetCryptocurrencyResult{}, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return response, nil
|
||
|
|
}
|