{-# LANGUAGE OverloadedStrings #-}

module CoinbasePro.WebSocketFeed.Channel.Heartbeat
    ( Heartbeat (..)
    )where

import           Data.Aeson      (FromJSON (..), withObject, (.:))
import           Data.Text       (Text)
import           Data.Time.Clock (UTCTime)


data Heartbeat = Heartbeat
    { sequence    :: Int
    , lastTradeId :: Int
    , productId   :: Text
    , time        :: UTCTime
    } deriving (Eq, Ord, Show)


instance FromJSON Heartbeat where
    parseJSON = withObject "heartbeat" $ \o ->
      Heartbeat <$>
        o .: "sequence" <*>
        o .: "last_trade_id" <*>
        o .: "product_id" <*>
        o .: "time"