cryptsy-api-0.1: src/Cryptsy/API/Public/OrderBook.hs
{-# LANGUAGE FlexibleContexts, ViewPatterns #-}
-- |Request for a single order book by market id.
module Cryptsy.API.Public.OrderBook
( module Cryptsy.API.Public.OrderBook
, module Cryptsy.API.Public.Types.Monad
, module Cryptsy.API.Public.Types.OrderBook
)
where
-- aeson
import Data.Aeson (FromJSON(..), withObject)
-- text
import Data.Text (Text, unpack)
-- unordered-containers
import Data.HashMap.Strict (toList)
-- this package
import Cryptsy.API.Public.Internal
import Cryptsy.API.Public.Types.Monad
import Cryptsy.API.Public.Types.OrderBook
-- |single orderbook API request
singleOrderBook :: FromJSON (GOrderBook p q t)
=> Text -- ^ marketid
-> PubCryptsy (GOrderBook p q t)
singleOrderBook (unpack -> reqMarket) =
pubCryptsy orderBookURL parseSingleOrderBook
where
orderBookURL = pubURL $ "singleorderdata&marketid=" ++ reqMarket
parseSingleOrderBook = withObject dataStr $ \o ->
case toList o of
[] -> fail "No order book returned."
[(_, v)] -> parseJSON v
_ -> fail "Multiple order books returned."
{-# INLINABLE singleOrderBook #-}