coinbase-pro-0.9.2.0: src/lib/CoinbasePro/Authenticated/Conversion.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module CoinbasePro.Authenticated.Conversion
( ConversionId
, StablecoinConversionRequest (..)
, StablecoinConversionResponse (..)
) where
import Data.Aeson (FromJSON, parseJSON,
withObject, (.:))
import Data.Aeson.Casing (snakeCase)
import Data.Aeson.TH (defaultOptions, deriveJSON,
fieldLabelModifier,
unwrapUnaryRecords)
import Data.UUID (UUID, toString)
import CoinbasePro.Authenticated.Accounts (AccountId)
import CoinbasePro.Types (CurrencyType)
data StablecoinConversionRequest = StablecoinConversionRequest
{ reqFrom :: CurrencyType
, reqTo :: CurrencyType
, reqAmount :: Double
} deriving Show
deriveJSON defaultOptions
{ fieldLabelModifier = snakeCase . drop 3
} ''StablecoinConversionRequest
newtype ConversionId = ConversionId UUID
instance Show ConversionId where
show (ConversionId u) = toString u
deriveJSON defaultOptions
{ fieldLabelModifier = snakeCase
, unwrapUnaryRecords = True
} ''ConversionId
data StablecoinConversionResponse = StablecoinConversionResponse
{ resId :: ConversionId
, resAmount :: Double
, resFromAccountId :: AccountId
, resToAccountId :: AccountId
, resFrom :: CurrencyType
, restTo :: CurrencyType
} deriving Show
instance FromJSON StablecoinConversionResponse where
parseJSON = withObject "stablecoin conversion response" $ \o -> StablecoinConversionResponse
<$> o .: "id"
<*> (read <$> o .: "amount")
<*> o .: "from_account_id"
<*> o .: "to_account_id"
<*> o .: "from"
<*> o .: "to"