{-# LANGUAGE OverloadedStrings #-} module CoinbasePro.WebSocketFeed.Channel.Full.Received ( Received (..) ) where import Data.Aeson (FromJSON (..), withObject, (.:), (.:?)) import Data.Time.Clock (UTCTime) import Data.UUID (fromString) import CoinbasePro.Types (ClientOrderId (..), Funds, OrderId, OrderType, Price, ProductId, ProfileId, Sequence, Side, Size, UserId) data Received = Received { Received -> UTCTime time :: UTCTime , Received -> ProductId productId :: ProductId , Received -> Sequence sequence :: Sequence , Received -> OrderId orderId :: OrderId , Received -> Maybe ClientOrderId clientOid :: Maybe ClientOrderId , Received -> Maybe Size size :: Maybe Size , Received -> Maybe Price price :: Maybe Price , Received -> Maybe Funds funds :: Maybe Funds , Received -> Side side :: Side , Received -> OrderType orderType :: OrderType , Received -> Maybe UserId userId :: Maybe UserId , Received -> Maybe UserId profileId :: Maybe ProfileId } deriving (Received -> Received -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Received -> Received -> Bool $c/= :: Received -> Received -> Bool == :: Received -> Received -> Bool $c== :: Received -> Received -> Bool Eq, Eq Received Received -> Received -> Bool Received -> Received -> Ordering Received -> Received -> Received 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 :: Received -> Received -> Received $cmin :: Received -> Received -> Received max :: Received -> Received -> Received $cmax :: Received -> Received -> Received >= :: Received -> Received -> Bool $c>= :: Received -> Received -> Bool > :: Received -> Received -> Bool $c> :: Received -> Received -> Bool <= :: Received -> Received -> Bool $c<= :: Received -> Received -> Bool < :: Received -> Received -> Bool $c< :: Received -> Received -> Bool compare :: Received -> Received -> Ordering $ccompare :: Received -> Received -> Ordering Ord, Sequence -> Received -> ShowS [Received] -> ShowS Received -> String forall a. (Sequence -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Received] -> ShowS $cshowList :: [Received] -> ShowS show :: Received -> String $cshow :: Received -> String showsPrec :: Sequence -> Received -> ShowS $cshowsPrec :: Sequence -> Received -> ShowS Show) instance FromJSON Received where parseJSON :: Value -> Parser Received parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a withObject String "received" forall a b. (a -> b) -> a -> b $ \Object o -> do UTCTime t <- Object o forall a. FromJSON a => Object -> Key -> Parser a .: Key "time" ProductId prd <- Object o forall a. FromJSON a => Object -> Key -> Parser a .: Key "product_id" Sequence sq <- Object o forall a. FromJSON a => Object -> Key -> Parser a .: Key "sequence" OrderId oid <- Object o forall a. FromJSON a => Object -> Key -> Parser a .: Key "order_id" Maybe ClientOrderId cloid <- (UUID -> ClientOrderId ClientOrderId forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$>) forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> Maybe UUID fromString forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Object o forall a. FromJSON a => Object -> Key -> Parser a .: Key "client_oid") Maybe Size sz <- Object o forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "size" Maybe Price px <- Object o forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "price" Maybe Funds fs <- Object o forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "funds" Side sd <- Object o forall a. FromJSON a => Object -> Key -> Parser a .: Key "side" OrderType ot <- Object o forall a. FromJSON a => Object -> Key -> Parser a .: Key "order_type" Maybe UserId ui <- Object o forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "user_id" Maybe UserId pfid <- Object o forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "profile_id" forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ UTCTime -> ProductId -> Sequence -> OrderId -> Maybe ClientOrderId -> Maybe Size -> Maybe Price -> Maybe Funds -> Side -> OrderType -> Maybe UserId -> Maybe UserId -> Received Received UTCTime t ProductId prd Sequence sq OrderId oid Maybe ClientOrderId cloid Maybe Size sz Maybe Price px Maybe Funds fs Side sd OrderType ot Maybe UserId ui Maybe UserId pfid