{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeOperators #-} module PegNet.RPC.Types.Balances 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 NetBalances = NetBalances { topLevelPBRL :: Double, topLevelPRVN :: Double, topLevelPEUR :: Double, topLevelPUSD :: Double, topLevelPEG :: Double, topLevelPCHF :: Double, topLevelPDCR :: Double, topLevelPLTC :: Double, topLevelPMXN :: Double, topLevelPKRW :: Double, topLevelPXBT :: Double, topLevelPBNB :: Double, topLevelPCAD :: Double, topLevelPZEC :: Double, topLevelPXAU :: Double, topLevelPADA :: Double, topLevelPCNY :: Double, topLevelPXMR :: Double, topLevelPHKD :: Double, topLevelPINR :: Double, topLevelPGBP :: Double, topLevelPSGD :: Double, topLevelPPHP :: Double, topLevelPJPY :: Double, topLevelPDASH :: Double, topLevelPXAG :: Double, topLevelPXBC :: Double, topLevelPFCT :: Double, topLevelPXLM :: Double, topLevelPETH :: Double } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON NetBalances where parseJSON (Object v) = NetBalances <$> 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 NetBalances where toJSON (NetBalances {..}) = object [ "pBRL" .= topLevelPBRL , "pRVN" .= topLevelPRVN , "pEUR" .= topLevelPEUR , "pUSD" .= topLevelPUSD , "PEG" .= topLevelPEG , "pCHF" .= topLevelPCHF , "pDCR" .= topLevelPDCR , "pLTC" .= topLevelPLTC , "pMXN" .= topLevelPMXN , "pKRW" .= topLevelPKRW , "pXBT" .= topLevelPXBT , "pBNB" .= topLevelPBNB , "pCAD" .= topLevelPCAD , "pZEC" .= topLevelPZEC , "pXAU" .= topLevelPXAU , "pADA" .= topLevelPADA , "pCNY" .= topLevelPCNY , "pXMR" .= topLevelPXMR , "pHKD" .= topLevelPHKD , "pINR" .= topLevelPINR , "pGBP" .= topLevelPGBP , "pSGD" .= topLevelPSGD , "pPHP" .= topLevelPPHP , "pJPY" .= topLevelPJPY , "pDASH" .= topLevelPDASH , "pXAG" .= topLevelPXAG , "pXBC" .= topLevelPXBC , "pFCT" .= topLevelPFCT , "pXLM" .= topLevelPXLM , "pETH" .= topLevelPETH ] toEncoding (NetBalances {..}) = pairs ( "pBRL" .= topLevelPBRL <> "pRVN" .= topLevelPRVN <> "pEUR" .= topLevelPEUR <> "pUSD" .= topLevelPUSD <> "PEG" .= topLevelPEG <> "pCHF" .= topLevelPCHF <> "pDCR" .= topLevelPDCR <> "pLTC" .= topLevelPLTC <> "pMXN" .= topLevelPMXN <> "pKRW" .= topLevelPKRW <> "pXBT" .= topLevelPXBT <> "pBNB" .= topLevelPBNB <> "pCAD" .= topLevelPCAD <> "pZEC" .= topLevelPZEC <> "pXAU" .= topLevelPXAU <> "pADA" .= topLevelPADA <> "pCNY" .= topLevelPCNY <> "pXMR" .= topLevelPXMR <> "pHKD" .= topLevelPHKD <> "pINR" .= topLevelPINR <> "pGBP" .= topLevelPGBP <> "pSGD" .= topLevelPSGD <> "pPHP" .= topLevelPPHP <> "pJPY" .= topLevelPJPY <> "pDASH" .= topLevelPDASH <> "pXAG" .= topLevelPXAG <> "pXBC" .= topLevelPXBC <> "pFCT" .= topLevelPFCT <> "pXLM" .= topLevelPXLM <> "pETH" .= topLevelPETH )