{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
module PegNet.RPC.Types.Rates where
import Control.Applicative
import Control.Monad (forM_, join, mzero)
import Data.Aeson (FromJSON (..), ToJSON (..),
Value (..), decode, object,
pairs, (.:), (.:?), (.=))
import Data.Aeson.AutoType.Alternative
import qualified Data.ByteString.Lazy.Char8 as BSL
import Data.Monoid
import Data.Text (Text)
import qualified GHC.Generics
import System.Environment (getArgs)
import System.Exit (exitFailure, exitSuccess)
import System.IO (hPutStrLn, stderr)
o .:?? val = fmap join (o .:? val)
data Rates = Rates {
ratePBRL :: Double,
ratePRVN :: Double,
ratePEUR :: Double,
ratePUSD :: Double,
ratePEG :: Double,
ratePCHF :: Double,
ratePDCR :: Double,
ratePLTC :: Double,
ratePMXN :: Double,
ratePKRW :: Double,
ratePXBT :: Double,
ratePBNB :: Double,
ratePCAD :: Double,
ratePZEC :: Double,
ratePXAU :: Double,
ratePADA :: Double,
ratePCNY :: Double,
ratePXMR :: Double,
ratePHKD :: Double,
ratePINR :: Double,
ratePGBP :: Double,
ratePSGD :: Double,
ratePPHP :: Double,
ratePJPY :: Double,
ratePDASH :: Double,
ratePXAG :: Double,
ratePXBC :: Double,
ratePFCT :: Double,
ratePXLM :: Double,
ratePETH :: Double
} deriving (Show,Eq,GHC.Generics.Generic)
instance FromJSON Rates where
parseJSON (Object v) =
Rates
<$> v
.: "pBRL"
<*> v
.: "pRVN"
<*> v
.: "pEUR"
<*> v
.: "pUSD"
<*> v
.: "PEG"
<*> v
.: "pCHF"
<*> v
.: "pDCR"
<*> v
.: "pLTC"
<*> v
.: "pMXN"
<*> v
.: "pKRW"
<*> v
.: "pXBT"
<*> v
.: "pBNB"
<*> v
.: "pCAD"
<*> v
.: "pZEC"
<*> v
.: "pXAU"
<*> v
.: "pADA"
<*> v
.: "pCNY"
<*> v
.: "pXMR"
<*> v
.: "pHKD"
<*> v
.: "pINR"
<*> v
.: "pGBP"
<*> v
.: "pSGD"
<*> v
.: "pPHP"
<*> v
.: "pJPY"
<*> v
.: "pDASH"
<*> v
.: "pXAG"
<*> v
.: "pXBC"
<*> v
.: "pFCT"
<*> v
.: "pXLM"
<*> v
.: "pETH"
parseJSON _ = mzero
instance ToJSON Rates where
toJSON (Rates {..}) = object
[ "pBRL" .= ratePBRL
, "pRVN" .= ratePRVN
, "pEUR" .= ratePEUR
, "pUSD" .= ratePUSD
, "PEG" .= ratePEG
, "pCHF" .= ratePCHF
, "pDCR" .= ratePDCR
, "pLTC" .= ratePLTC
, "pMXN" .= ratePMXN
, "pKRW" .= ratePKRW
, "pXBT" .= ratePXBT
, "pBNB" .= ratePBNB
, "pCAD" .= ratePCAD
, "pZEC" .= ratePZEC
, "pXAU" .= ratePXAU
, "pADA" .= ratePADA
, "pCNY" .= ratePCNY
, "pXMR" .= ratePXMR
, "pHKD" .= ratePHKD
, "pINR" .= ratePINR
, "pGBP" .= ratePGBP
, "pSGD" .= ratePSGD
, "pPHP" .= ratePPHP
, "pJPY" .= ratePJPY
, "pDASH" .= ratePDASH
, "pXAG" .= ratePXAG
, "pXBC" .= ratePXBC
, "pFCT" .= ratePFCT
, "pXLM" .= ratePXLM
, "pETH" .= ratePETH
]
toEncoding (Rates {..}) = pairs
( "pBRL"
.= ratePBRL
<> "pRVN"
.= ratePRVN
<> "pEUR"
.= ratePEUR
<> "pUSD"
.= ratePUSD
<> "PEG"
.= ratePEG
<> "pCHF"
.= ratePCHF
<> "pDCR"
.= ratePDCR
<> "pLTC"
.= ratePLTC
<> "pMXN"
.= ratePMXN
<> "pKRW"
.= ratePKRW
<> "pXBT"
.= ratePXBT
<> "pBNB"
.= ratePBNB
<> "pCAD"
.= ratePCAD
<> "pZEC"
.= ratePZEC
<> "pXAU"
.= ratePXAU
<> "pADA"
.= ratePADA
<> "pCNY"
.= ratePCNY
<> "pXMR"
.= ratePXMR
<> "pHKD"
.= ratePHKD
<> "pINR"
.= ratePINR
<> "pGBP"
.= ratePGBP
<> "pSGD"
.= ratePSGD
<> "pPHP"
.= ratePPHP
<> "pJPY"
.= ratePJPY
<> "pDASH"
.= ratePDASH
<> "pXAG"
.= ratePXAG
<> "pXBC"
.= ratePXBC
<> "pFCT"
.= ratePFCT
<> "pXLM"
.= ratePXLM
<> "pETH"
.= ratePETH
)