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