coinbase-pro-0.5.0.0: src/lib/CoinbasePro/MarketData/FullOrderBook.hs
{-# LANGUAGE OverloadedStrings #-}
module CoinbasePro.MarketData.FullOrderBook
( FullOrderBook (..)
, Order (..)
) where
import Data.Aeson (FromJSON (..), withArray, withObject, (.:))
import qualified Data.Vector as V
import CoinbasePro.Types (OrderId (..), Price, Size)
data FullOrderBook = FullOrderBook
{ sequence :: Int
, bids :: [Order]
, asks :: [Order]
} deriving (Eq, Ord, Show)
instance FromJSON FullOrderBook where
parseJSON = withObject "orderbook" $ \o ->
FullOrderBook <$>
o .: "sequence" <*>
o .: "bids" <*>
o .: "asks"
data Order = Order
{ price :: Price
, size :: Size
, orderId :: OrderId
} deriving (Eq, Ord, Show)
instance FromJSON Order where
parseJSON = withArray "order" $ \a -> do
let l = V.toList a
px <- parseJSON $ head l
sz <- parseJSON $ l !! 1
oid <- parseJSON $ l !! 2
return $ Order px sz oid