module Bittrex.Types where
import Data.Aeson
import qualified Data.Aeson.Types as Aeson
import Data.Fixed
import Data.Scientific
import Data.Text (Text)
import qualified Data.Text as Text
import Data.Time
import Data.Time.Format
import Flow ((.>))
import GHC.Generics (Generic)
import Text.Read (readMaybe)
data E8
instance HasResolution E8 where
resolution _ = 10 ^ 8
type Params = [(String, String)]
newtype Time
= Time UTCTime
deriving (Eq, Show)
instance FromJSON Time where
parseJSON = withText "Time" $ \t -> pure (Time (parse (Text.unpack t)))
where
parse :: String -> UTCTime
parse = parseTimeOrError True defaultTimeLocale
$ iso8601DateFormat (Just "%H:%M:%S%Q")
data APIType
= PublicAPI
| AccountAPI
| MarketAPI
deriving (Eq)
instance Show APIType where
show AccountAPI = "account"
show PublicAPI = "public"
show MarketAPI = "market"
data APIOpts
= APIOpts
{ apiOptsAPIType :: !APIType
, apiOptsQueryParams :: !Params
, apiOptsVersion :: !Text
, apiOptsPath :: !Text
, apiOptsKeys :: !APIKeys
}
deriving (Eq, Show)
data ErrorMessage
= BittrexError !BittrexError
| DecodeFailure !String !Aeson.Value
deriving (Eq, Show, Generic)
data BittrexError
= INVALID_MARKET
| MARKET_NOT_PROVIDED
| APIKEY_NOT_PROVIDED
| APIKEY_INVALID
| INVALID_SIGNATURE
| NONCE_NOT_PROVIDED
| INVALID_PERMISSION
| INVALID_CURRENCY
| WITHDRAWAL_TOO_SMALL
| CURRENCY_DOES_NOT_EXIST
| ADDRESS_GENERATING
deriving (Eq, Show, Generic)
instance FromJSON BittrexError where
parseJSON (String "INVALID_MARKET") = pure INVALID_MARKET
parseJSON (String "MARKET_NOT_PROVIDED") = pure MARKET_NOT_PROVIDED
parseJSON (String "APIKEY_NOT_PROVIDED") = pure APIKEY_NOT_PROVIDED
parseJSON (String "APIKEY_INVALID") = pure APIKEY_INVALID
parseJSON (String "INVALID_SIGNATURE") = pure INVALID_SIGNATURE
parseJSON (String "NONCE_NOT_PROVIDED") = pure NONCE_NOT_PROVIDED
parseJSON (String "INVALID_PERMISSION") = pure INVALID_PERMISSION
parseJSON (String "INVALID_CURRENCY") = pure INVALID_CURRENCY
parseJSON (String "WITHDRAWAL_TOO_SMALL") = pure WITHDRAWAL_TOO_SMALL
parseJSON (String "CURRENCY_DOES_NOT_EXIST") = pure CURRENCY_DOES_NOT_EXIST
parseJSON (String "ADDRESS_GENERATING") = pure ADDRESS_GENERATING
instance ToJSON BittrexError where
toJSON = show .> toJSON
data MarketName
= NewMarket Text
| MarketName MarketName'
deriving (Eq, Show)
instance FromJSON MarketName where
parseJSON = withText "Market Name" $ \t -> do
case readMaybe (Text.unpack (Text.replace "-" "_" t)) of
Nothing -> pure (NewMarket t)
(Just k) -> pure (MarketName k)
data MarketName'
= BTC_LTC
| BTC_DOGE
| BTC_VTC
| BTC_PPC
| BTC_FTC
| BTC_RDD
| BTC_NXT
| BTC_DASH
| BTC_POT
| BTC_BLK
| BTC_EMC2
| BTC_XMY
| BTC_AUR
| BTC_EFL
| BTC_GLD
| BTC_SLR
| BTC_PTC
| BTC_GRS
| BTC_NLG
| BTC_RBY
| BTC_XWC
| BTC_MONA
| BTC_THC
| BTC_ENRG
| BTC_ERC
| BTC_VRC
| BTC_CURE
| BTC_XMR
| BTC_CLOAK
| BTC_START
| BTC_KORE
| BTC_XDN
| BTC_TRUST
| BTC_NAV
| BTC_XST
| BTC_BTCD
| BTC_VIA
| BTC_PINK
| BTC_IOC
| BTC_CANN
| BTC_SYS
| BTC_NEOS
| BTC_DGB
| BTC_BURST
| BTC_EXCL
| BTC_SWIFT
| BTC_DOPE
| BTC_BLOCK
| BTC_ABY
| BTC_BYC
| BTC_XMG
| BTC_BLITZ
| BTC_BAY
| BTC_FAIR
| BTC_SPR
| BTC_VTR
| BTC_XRP
| BTC_GAME
| BTC_COVAL
| BTC_NXS
| BTC_XCP
| BTC_BITB
| BTC_GEO
| BTC_FLDC
| BTC_GRC
| BTC_FLO
| BTC_NBT
| BTC_MUE
| BTC_XEM
| BTC_CLAM
| BTC_DMD
| BTC_GAM
| BTC_SPHR
| BTC_OK
| BTC_SNRG
| BTC_PKB
| BTC_CPC
| BTC_AEON
| BTC_ETH
| BTC_GCR
| BTC_TX
| BTC_BCY
| BTC_EXP
| BTC_INFX
| BTC_OMNI
| BTC_AMP
| BTC_AGRS
| BTC_XLM
| USDT_BTC
| BTC_CLUB
| BTC_VOX
| BTC_EMC
| BTC_FCT
| BTC_MAID
| BTC_EGC
| BTC_SLS
| BTC_RADS
| BTC_DCR
| BTC_BSD
| BTC_XVG
| BTC_PIVX
| BTC_XVC
| BTC_MEME
| BTC_STEEM
| BTC_2GIVE
| BTC_LSK
| BTC_PDC
| BTC_BRK
| BTC_DGD
| ETH_DGD
| BTC_WAVES
| BTC_RISE
| BTC_LBC
| BTC_SBD
| BTC_BRX
| BTC_ETC
| ETH_ETC
| BTC_STRAT
| BTC_UNB
| BTC_SYNX
| BTC_TRIG
| BTC_EBST
| BTC_VRM
| BTC_SEQ
| BTC_REP
| BTC_SHIFT
| BTC_ARDR
| BTC_XZC
| BTC_NEO
| BTC_ZEC
| BTC_ZCL
| BTC_IOP
| BTC_GOLOS
| BTC_UBQ
| BTC_KMD
| BTC_GBG
| BTC_SIB
| BTC_ION
| BTC_LMC
| BTC_QWARK
| BTC_CRW
| BTC_SWT
| BTC_MLN
| BTC_ARK
| BTC_DYN
| BTC_TKS
| BTC_MUSIC
| BTC_DTB
| BTC_INCNT
| BTC_GBYTE
| BTC_GNT
| BTC_NXC
| BTC_EDG
| BTC_LGD
| BTC_TRST
| ETH_GNT
| ETH_REP
| USDT_ETH
| ETH_WINGS
| BTC_WINGS
| BTC_RLC
| BTC_GNO
| BTC_GUP
| BTC_LUN
| ETH_GUP
| ETH_RLC
| ETH_LUN
| ETH_GNO
| BTC_APX
| BTC_HMQ
| ETH_HMQ
| BTC_ANT
| ETH_TRST
| ETH_ANT
| BTC_SC
| ETH_BAT
| BTC_BAT
| BTC_ZEN
| BTC_1ST
| BTC_QRL
| ETH_1ST
| ETH_QRL
| BTC_CRB
| ETH_CRB
| ETH_LGD
| BTC_PTOY
| ETH_PTOY
| BTC_MYST
| ETH_MYST
| BTC_CFI
| ETH_CFI
| BTC_BNT
| ETH_BNT
| BTC_NMR
| ETH_NMR
| ETH_LTC
| ETH_XRP
| BTC_SNT
| ETH_SNT
| BTC_DCT
| BTC_XEL
| BTC_MCO
| ETH_MCO
| BTC_ADT
| ETH_ADT
| BTC_FUN
| ETH_FUN
| BTC_PAY
| ETH_PAY
| BTC_MTL
| ETH_MTL
| BTC_STORJ
| ETH_STORJ
| BTC_ADX
| ETH_ADX
| ETH_DASH
| ETH_SC
| ETH_ZEC
| USDT_ZEC
| USDT_LTC
| USDT_ETC
| USDT_XRP
| BTC_OMG
| ETH_OMG
| BTC_CVC
| ETH_CVC
| BTC_PART
| BTC_QTUM
| ETH_QTUM
| ETH_XMR
| ETH_XEM
| ETH_XLM
| ETH_NEO
| USDT_XMR
| USDT_DASH
| ETH_BCC
| USDT_BCC
| BTC_BCC
| BTC_DNT
| ETH_DNT
| USDT_NEO
| ETH_WAVES
| ETH_STRAT
| ETH_DGB
| ETH_FCT
| USDT_OMG
| BTC_ADA
| BTC_MANA
| ETH_MANA
| BTC_SALT
| ETH_SALT
| BTC_TIX
| ETH_TIX
| BTC_RCN
| ETH_RCN
| BTC_VIB
| ETH_VIB
| BTC_MER
| BTC_POWR
| ETH_POWR
| BTC_BTG
| ETH_BTG
| USDT_BTG
| ETH_ADA
| BTC_ENG
| ETH_ENG
| USDT_ADA
| USDT_XVG
| USDT_NXT
| BTC_UKG
| ETH_UKG
deriving (Eq, Show, Read, Generic)
newtype Bid
= Bid (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Bid
newtype Ask
= Ask (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Ask
newtype Last
= Last (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Last
newtype High
= High (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON High
newtype Low
= Low (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Low
newtype Volume
= Volume (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Volume
newtype BaseVolume
= BaseVolume (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON BaseVolume
newtype PrevDay
= PrevDay (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON PrevDay
newtype Quantity
= Quantity (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Quantity
newtype Rate
= Rate (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Rate
newtype Price
= Price (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Price
newtype Total
= Total (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Total
newtype QuantityRemaining
= QuantityRemaining (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON QuantityRemaining
newtype Limit
= Limit (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Limit
newtype CommissionPaid
= CommissionPaid (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON CommissionPaid
newtype Balance'
= Balance' (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Balance'
newtype Available
= Available (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Available
newtype Pending
= Pending (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Pending
newtype Reserved
= Reserved (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Reserved
newtype ReserveRemaining
= ReserveRemaining (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON ReserveRemaining
newtype CommissionReserved
= CommissionReserved (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON CommissionReserved
newtype CommissionReserveRemaining
= CommissionReserveRemaining (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON CommissionReserveRemaining
newtype TxCost
= TxCost (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON TxCost
newtype Amount
= Amount (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Amount
newtype Commission
= Commission (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON Commission
data Ticker
= Ticker
{ tickerBid :: !Bid
, tickerAsk :: !Ask
, tickerLast :: !Last
}
deriving (Show, Generic)
instance FromJSON Ticker where
parseJSON = withObject "Ticker" $ \o -> do
tickerBid <- o .: "Bid"
tickerAsk <- o .: "Ask"
tickerLast <- o .: "Last"
pure (Ticker {..})
newtype MinTradeSize
= MinTradeSize (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON MinTradeSize
newtype TxFee
= TxFee (Fixed E8)
deriving (Eq, Num, Show, Ord, Generic)
deriving instance FromJSON TxFee
data Market
= Market
{ marketMarketCurrency :: !Text
, marketBaseCurrency :: !Text
, marketMarketCurrencyLong :: !Text
, marketBaseCurrencyLong :: !Text
, marketMinTradeSize :: !MinTradeSize
, marketName :: !MarketName
, marketIsActive :: !Bool
, marketCreated :: !Time
}
deriving (Eq, Show)
instance FromJSON Market where
parseJSON = withObject "Market" $ \o -> do
marketMarketCurrency <- o .: "MarketCurrency"
marketBaseCurrency <- o .: "BaseCurrency"
marketMarketCurrencyLong <- o .: "MarketCurrencyLong"
marketBaseCurrencyLong <- o .: "BaseCurrencyLong"
marketMinTradeSize <- o .: "MinTradeSize"
marketName <- o .: "MarketName"
marketIsActive <- o .: "IsActive"
marketCreated <- o .: "Created"
pure (Market {..})
data Currency
= Currency
{ currencyName :: !Text
, currencyNameLong :: !Text
, currencyMinConfirmation :: !Int
, currencyTxFee :: !TxFee
, currencyIsActive :: !Bool
, currencyCoinType :: !Text
, currencyBaseAddress :: !(Maybe Text)
}
deriving (Eq, Show)
instance FromJSON Currency where
parseJSON = withObject "Currency" $ \o -> do
currencyName <- o .: "Currency"
currencyNameLong <- o .: "CurrencyLong"
currencyMinConfirmation <- o .: "MinConfirmation"
currencyTxFee <- o .: "TxFee"
currencyIsActive <- o .: "IsActive"
currencyCoinType <- o .: "CoinType"
currencyBaseAddress <- o .:? "BaseAddress"
pure (Currency {..})
data OrderBookEntry
= OrderBookEntry
{ orderBookEntryQuantity :: !Quantity
, orderBookEntryRate :: !Rate
}
deriving (Eq, Show)
instance FromJSON OrderBookEntry where
parseJSON = withObject "OrderBookEntry" $ \o -> do
orderBookEntryQuantity <- o .: "Quantity"
orderBookEntryRate <- o .: "Rate"
pure (OrderBookEntry {..})
data OrderBook
= OrderBook
{ orderBookBuy :: ![OrderBookEntry]
, orderBookSell :: ![OrderBookEntry]
}
deriving (Eq, Show)
instance FromJSON OrderBook where
parseJSON = withObject "OrderBook" $ \o -> do
orderBookBuy <- o .: "buy"
orderBookSell <- o .: "sell"
pure (OrderBook {..})
data MarketHistory
= MarketHistory
{ marketHistoryId :: !Integer
, marketHistoryTimeStamp :: !Time
, marketHistoryQuantity :: !Quantity
, marketHistoryPrice :: !Price
, marketHistoryTotal :: !Total
, marketHistoryFillType :: !Text
, marketHistoryOrderType :: !Text
}
deriving (Eq, Show)
instance FromJSON MarketHistory where
parseJSON = withObject "MarketHistory" $ \o -> do
marketHistoryId <- o .: "Id"
marketHistoryTimeStamp <- o .: "TimeStamp"
marketHistoryQuantity <- o .: "Quantity"
marketHistoryPrice <- o .: "Price"
marketHistoryTotal <- o .: "Total"
marketHistoryFillType <- o .: "FillType"
marketHistoryOrderType <- o .: "OrderType"
pure (MarketHistory {..})
data APIKeys
= APIKeys
{ apiKey :: !String
, secretKey :: !String
}
deriving (Eq, Show)
type Address = String
type PaymentId = String
data WithdrawalHistory
= WithdrawalHistory
{ withdrawalHistoryPaymentUUID :: !Text
, withdrawalHistoryCurrency :: !Text
, withdrawalHistoryAmount :: !Amount
, withdrawalHistoryAddress :: !Text
, withdrawalHistoryOpened :: !Text
, withdrawalHistoryAuthorized :: !Bool
, withdrawalHistoryPendingPayment :: !Bool
, withdrawalHistoryTxCost :: !Scientific
, withdrawalHistoryTxId :: !Text
, withdrawalHistoryCanceled :: !Bool
, withdrawalHistoryInvalidAddress :: !Bool
}
deriving (Eq, Show, Generic)
instance FromJSON WithdrawalHistory where
parseJSON = withObject "WithdrawalHistory" $ \o -> do
withdrawalHistoryPaymentUUID <- o .: "PaymentUuid"
withdrawalHistoryCurrency <- o .: "Currency"
withdrawalHistoryAmount <- o .: "Amount"
withdrawalHistoryAddress <- o .: "Address"
withdrawalHistoryOpened <- o .: "Opened"
withdrawalHistoryAuthorized <- o .: "Authorized"
withdrawalHistoryPendingPayment <- o .: "PendingPayment"
withdrawalHistoryTxCost <- o .: "TxCost"
withdrawalHistoryTxId <- o .: "TxId"
withdrawalHistoryCanceled <- o .: "Canceled"
withdrawalHistoryInvalidAddress <- o .: "InvalidAddress"
pure (WithdrawalHistory {..})
data DepositHistory
= DepositHistory
{ depositHistoryCurrency :: !Text
, depositHistoryAmount :: !Scientific
, depositHistoryLastUpdated :: !Text
, depositHistoryConfirmations :: !Scientific
, depositHistoryId :: !Scientific
, depositHistoryTxId :: !Text
, depositHistoryCryptoAddress :: !Text
}
deriving (Eq, Show, Generic)
instance FromJSON DepositHistory where
parseJSON = withObject "DepositHistory" $ \o -> do
depositHistoryCurrency <- o .: "Currency"
depositHistoryAmount <- o .: "Amount"
depositHistoryLastUpdated <- o .: "LastUpdated"
depositHistoryConfirmations <- o .: "Confirmations"
depositHistoryId <- o .: "Id"
depositHistoryTxId <- o .: "TxId"
depositHistoryCryptoAddress <- o .: "CryptoAddress"
pure (DepositHistory {..})
type CurrencyName = Text
data DepositAddress
= DepositAddress
{ depositAddressCurrency :: !Text
, depositAddressAddress :: !Text
}
deriving (Eq, Show, Generic)
instance FromJSON DepositAddress where
parseJSON = withObject "DepositAddress" $ \o -> do
depositAddressCurrency <- o .: "Currency"
depositAddressAddress <- o .: "Address"
pure (DepositAddress {..})
newtype UUID
= UUID Text
deriving (Eq, Show)
instance FromJSON UUID where
parseJSON = withObject "UUID" $ \o -> do
UUID <$> o .: "uuid"
data Balance
= Balance
{ balanceCurrency :: !Text
, balanceBalance :: !Balance'
, balanceAvailable :: !Available
, balancePending :: !Pending
, balanceCryptoAddress :: !(Maybe Text)
, balanceUUID :: !(Maybe Text)
}
deriving (Eq, Show, Generic)
instance FromJSON Balance where
parseJSON = withObject "Balance" $ \o -> do
balanceCurrency <- o .: "Currency"
balanceBalance <- o .: "Balance"
balanceAvailable <- o .: "Available"
balancePending <- o .: "Pending"
balanceCryptoAddress <- o .:? "CryptoAddress"
balanceUUID <- o .:? "Uuid"
pure (Balance {..})
data OrderType
= SELL
| BUY
| LIMIT_SELL
| LIMIT_BUY
deriving (Eq, Show, Generic)
instance FromJSON OrderType where
parseJSON (String "SELL") = pure SELL
parseJSON (String "BUY") = pure BUY
parseJSON (String "LIMIT_SELL") = pure LIMIT_SELL
parseJSON (String "LIMIT_BUY") = pure LIMIT_BUY
data OpenOrder
= OpenOrder
{ openOrderUUID :: !(Maybe Text)
, openOrderOrderUUID :: !Text
, openOrderExchange :: !Text
, openOrderOrderType :: !OrderType
, openOrderQuantity :: !Quantity
, openOrderQuantityRemaining :: !QuantityRemaining
, openOrderLimit :: !Limit
, openOrderCommissionPaid :: !CommissionPaid
, openOrderPrice :: !Price
, openOrderPricePerUnit :: !(Maybe Price)
, openOrderOpened :: !Time
, openOrderClosed :: !(Maybe Time)
, openOrderCancelInitiated :: !Bool
, openOrderImmediateOrCancel :: !Bool
, openOrderIsConditional :: !Bool
, openOrderCondition :: !(Maybe Text)
, openOrderConditionTarget :: !(Maybe Text)
}
deriving (Eq, Show, Generic)
instance FromJSON OpenOrder where
parseJSON = withObject "OpenOrder" $ \o -> do
openOrderUUID <- o .:? "Uuid"
openOrderOrderUUID <- o .: "OrderUuid"
openOrderExchange <- o .: "Exchange"
openOrderOrderType <- o .: "OrderType"
openOrderQuantity <- o .: "Quantity"
openOrderQuantityRemaining <- o .: "QuantityRemaining"
openOrderLimit <- o .: "Limit"
openOrderCommissionPaid <- o .: "CommissionPaid"
openOrderPrice <- o .: "Price"
openOrderPricePerUnit <- o .:? "PricePerUnit"
openOrderOpened <- o .: "Opened"
openOrderClosed <- o .:? "Closed"
openOrderCancelInitiated <- o .: "CancelInitiated"
openOrderImmediateOrCancel <- o .: "ImmediateOrCancel"
openOrderIsConditional <- o .: "IsConditional"
openOrderCondition <- o .:? "Condition"
openOrderConditionTarget <- o .:? "ConditionTarget"
pure (OpenOrder {..})
data OrderHistory
= OrderHistory
{ orderHistoryOrderUUID :: !Text
, orderHistoryExchange :: !Text
, orderHistoryTimeStamp :: !Time
, orderHistoryOrderType :: !OrderType
, orderHistoryLimit :: !Limit
, orderHistoryQuantity :: !Quantity
, orderHistoryQuantityRemaining :: !QuantityRemaining
, orderHistoryCommission :: !Commission
, orderHistoryPrice :: !Price
, orderHistoryPricePerUnit :: !(Maybe Price)
, orderHistoryIsConditional :: !Bool
, orderHistoryCondition :: !Text
, orderHistoryConditionTarget :: !(Maybe Text)
, orderHistoryImmediateOrCancel :: !Bool
}
deriving (Eq, Show, Generic)
instance FromJSON OrderHistory where
parseJSON = withObject "OrderHistory" $ \o -> do
orderHistoryOrderUUID <- o .: "OrderUuid"
orderHistoryExchange <- o .: "Exchange"
orderHistoryTimeStamp <- o .: "TimeStamp"
orderHistoryOrderType <- o .: "OrderType"
orderHistoryLimit <- o .: "Limit"
orderHistoryQuantity <- o .: "Quantity"
orderHistoryQuantityRemaining <- o .: "QuantityRemaining"
orderHistoryCommission <- o .: "Commission"
orderHistoryPrice <- o .: "Price"
orderHistoryPricePerUnit <- o .:? "PricePerUnit"
orderHistoryIsConditional <- o .: "IsConditional"
orderHistoryCondition <- o .: "Condition"
orderHistoryConditionTarget <- o .:? "ConditionTarget"
orderHistoryImmediateOrCancel <- o .: "ImmediateOrCancel"
pure (OrderHistory {..})
data Order
= Order
{ orderAccountID :: !(Maybe Text)
, orderOrderUUID :: !Text
, orderExchange :: !Text
, orderOrderType :: !OrderType
, orderQuantity :: !Quantity
, orderQuantityRemaining :: !QuantityRemaining
, orderLimit :: !Limit
, orderReserved :: !Reserved
, orderReservedRemaining :: !ReserveRemaining
, orderCommissionReserved :: !CommissionReserved
, orderCommissionReserveRemaining :: !CommissionReserveRemaining
, orderCommissionPaid :: !CommissionPaid
, orderPrice :: !Price
, orderPricePerUnit :: !(Maybe Price)
, orderOpened :: !Time
, orderClosed :: !(Maybe Time)
, orderIsOpen :: !Bool
, orderSentinel :: !Text
, orderCommission :: !Commission
, orderIsConditional :: !Bool
, orderCancelInitiated :: !Bool
, orderImmediateOrCancel :: !Bool
, orderCondition :: !Text
, orderConditionTarget :: !(Maybe Text)
}
deriving (Eq, Show, Generic)
instance FromJSON Order where
parseJSON = withObject "Order" $ \o -> do
orderAccountID <- o .:? "AccountId"
orderOrderUUID <- o .: "OrderUuid"
orderExchange <- o .: "Exchange"
orderOrderType <- o .: "OrderType"
orderQuantity <- o .: "Quantity"
orderQuantityRemaining <- o .: "QuantityRemaining"
orderLimit <- o .: "Limit"
orderReserved <- o .: "Reserved"
orderReservedRemaining <- o .: "ReservedRemaining"
orderCommissionReserved <- o .: "CommissionReserved"
orderCommissionReserveRemaining <- o .: "CommissionReserveRemaining"
orderCommissionPaid <- o .: "CommissionPaid"
orderPrice <- o .: "Price"
orderPricePerUnit <- o .:? "PricePerUnit"
orderOpened <- o .: "Opened"
orderClosed <- o .:? "Closed"
orderIsOpen <- o .: "IsOpen"
orderSentinel <- o .: "Sentinel"
orderCommission <- o .: "Commission"
orderIsConditional <- o .: "IsConditional"
orderCancelInitiated <- o .: "CancelInitiated"
orderImmediateOrCancel <- o .: "ImmediateOrCancel"
orderCondition <- o .: "Condition"
orderConditionTarget <- o .:? "ConditionTarget"
pure (Order {..})
data MarketSummary
= MarketSummary
{ marketSummaryMarketName :: !MarketName
, marketSummaryHigh :: !High
, marketSummaryLow :: !Low
, marketSummaryVolume :: !Volume
, marketSummaryLast :: !Last
, marketSummaryBaseVolume :: !BaseVolume
, marketSummaryTimeStamp :: !Time
, marketSummaryBid :: !Bid
, marketSummaryAsk :: !Ask
, marketSummaryOpenBuyOrders :: !Int
, marketSummaryOpenSellOrders :: !Int
, marketSummaryPrevDay :: !PrevDay
, marketSummaryCreated :: !Time
, marketSummaryDisplayMarketName :: !(Maybe Text)
}
deriving (Eq, Show, Generic)
instance FromJSON MarketSummary where
parseJSON = withObject "MarketSummary" $ \o -> do
marketSummaryMarketName <- o .: "MarketName"
marketSummaryHigh <- o .: "High"
marketSummaryLow <- o .: "Low"
marketSummaryVolume <- o .: "Volume"
marketSummaryLast <- o .: "Last"
marketSummaryBaseVolume <- o .: "BaseVolume"
marketSummaryTimeStamp <- o .: "TimeStamp"
marketSummaryBid <- o .: "Bid"
marketSummaryAsk <- o .: "Ask"
marketSummaryOpenBuyOrders <- o .: "OpenBuyOrders"
marketSummaryOpenSellOrders <- o .: "OpenSellOrders"
marketSummaryPrevDay <- o .: "PrevDay"
marketSummaryCreated <- o .: "Created"
marketSummaryDisplayMarketName <- o .:? "DisplayMarketName"
pure (MarketSummary {..})