{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell   #-}

module CoinbasePro.WebSocketFeed.Channel.Full.Open
    ( Open (..)
    ) where

import           Data.Aeson.Casing (snakeCase)
import           Data.Aeson.TH     (defaultOptions, deriveJSON,
                                    fieldLabelModifier)
import           Data.Time.Clock   (UTCTime)

import           CoinbasePro.Types (OrderId, Price, ProductId, ProfileId,
                                    Sequence, Side, Size, UserId)


data Open = Open
    { Open -> UTCTime
time          :: UTCTime
    , Open -> ProductId
productId     :: ProductId
    , Open -> Sequence
sequence      :: Sequence
    , Open -> OrderId
orderId       :: OrderId
    , Open -> Price
price         :: Price
    , Open -> Maybe Size
remainingSize :: Maybe Size
    , Open -> Side
side          :: Side
    , Open -> Maybe UserId
userId        :: Maybe UserId
    , Open -> Maybe UserId
profileId     :: Maybe ProfileId
    } deriving (Open -> Open -> Bool
(Open -> Open -> Bool) -> (Open -> Open -> Bool) -> Eq Open
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Open -> Open -> Bool
$c/= :: Open -> Open -> Bool
== :: Open -> Open -> Bool
$c== :: Open -> Open -> Bool
Eq, Eq Open
Eq Open
-> (Open -> Open -> Ordering)
-> (Open -> Open -> Bool)
-> (Open -> Open -> Bool)
-> (Open -> Open -> Bool)
-> (Open -> Open -> Bool)
-> (Open -> Open -> Open)
-> (Open -> Open -> Open)
-> Ord Open
Open -> Open -> Bool
Open -> Open -> Ordering
Open -> Open -> Open
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Open -> Open -> Open
$cmin :: Open -> Open -> Open
max :: Open -> Open -> Open
$cmax :: Open -> Open -> Open
>= :: Open -> Open -> Bool
$c>= :: Open -> Open -> Bool
> :: Open -> Open -> Bool
$c> :: Open -> Open -> Bool
<= :: Open -> Open -> Bool
$c<= :: Open -> Open -> Bool
< :: Open -> Open -> Bool
$c< :: Open -> Open -> Bool
compare :: Open -> Open -> Ordering
$ccompare :: Open -> Open -> Ordering
$cp1Ord :: Eq Open
Ord, Sequence -> Open -> ShowS
[Open] -> ShowS
Open -> String
(Sequence -> Open -> ShowS)
-> (Open -> String) -> ([Open] -> ShowS) -> Show Open
forall a.
(Sequence -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Open] -> ShowS
$cshowList :: [Open] -> ShowS
show :: Open -> String
$cshow :: Open -> String
showsPrec :: Sequence -> Open -> ShowS
$cshowsPrec :: Sequence -> Open -> ShowS
Show)


deriveJSON defaultOptions {fieldLabelModifier = snakeCase} ''Open