{-# 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) -------------------------------------------------------------------------------- -- | Workaround for https://github.com/bos/aeson/issues/287. 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 )