coinbase-pro-0.8.0.0: src/lib/CoinbasePro/WebSocketFeed/Channel/Full/Done.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module CoinbasePro.WebSocketFeed.Channel.Full.Done
( Done (..)
) where
import Data.Aeson (FromJSON, parseJSON)
import Data.Aeson.Casing (snakeCase)
import Data.Aeson.TH (defaultOptions, deriveJSON,
fieldLabelModifier)
import Data.Text (Text)
import Data.Time.Clock (UTCTime)
import CoinbasePro.Types (OrderId, Price, ProductId, ProfileId,
Sequence, Side, Size, UserId)
type Reason = Text
newtype RemainingSize = RemainingSize { unRemainingSize :: Maybe Size }
deriving (Eq, Ord, Show)
instance FromJSON RemainingSize where
parseJSON = (RemainingSize <$>) . parseJSON
data Done = Done
{ time :: UTCTime
, productId :: ProductId
, sequence :: Sequence
, price :: Maybe Price
, orderId :: OrderId
, reason :: Reason
, side :: Side
, remainingSize :: Maybe Size
, userId :: Maybe UserId
, profileId :: Maybe ProfileId
} deriving (Eq, Ord, Show)
deriveJSON defaultOptions {fieldLabelModifier = snakeCase} ''Done