coinbase-pro-0.5.0.0: src/lib/CoinbasePro/Authenticated/Accounts.hs
{-# LANGUAGE OverloadedStrings #-}
module CoinbasePro.Authenticated.Accounts
( Account (..)
, AccountId (..)
, Currency (..)
, Balance (..)
, ProfileId (..)
) where
import Data.Aeson (FromJSON (..), withObject, (.:))
import Data.Text (Text)
import Web.HttpApiData (ToHttpApiData (..))
newtype AccountId = AccountId Text
deriving (Eq, Show)
instance ToHttpApiData AccountId where
toUrlPiece (AccountId aid) = aid
toQueryParam (AccountId aid) = aid
newtype Currency = Currency Text
deriving (Eq, Show)
newtype Balance = Balance Double
deriving (Eq, Show)
newtype ProfileId = ProfileId Text
deriving (Eq, Show)
data Account = Account
{ accountId :: AccountId
, currency :: Currency
, balance :: Balance
, available :: Balance
, hold :: Balance
, profileId :: ProfileId
} deriving (Eq, Show)
instance FromJSON Account where
parseJSON = withObject "account" $ \o -> Account
<$> (AccountId <$> o .: "id")
<*> (Currency <$> o .: "currency")
<*> (Balance . read <$> o .: "balance")
<*> (Balance . read <$> o .: "available")
<*> (Balance . read <$> o .: "hold")
<*> (ProfileId <$> o .: "profile_id")