{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
module PegNet.RPC.Types.Issuance 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 Issuance = Issuance {
issuancePBRL :: Double,
issuancePRVN :: Double,
issuancePEUR :: Double,
issuancePUSD :: Double,
issuancePEG :: Double,
issuancePCHF :: Double,
issuancePDCR :: Double,
issuancePLTC :: Double,
issuancePMXN :: Double,
issuancePKRW :: Double,
issuancePXBT :: Double,
issuancePBNB :: Double,
issuancePCAD :: Double,
issuancePZEC :: Double,
issuancePXAU :: Double,
issuancePADA :: Double,
issuancePCNY :: Double,
issuancePXMR :: Double,
issuancePHKD :: Double,
issuancePINR :: Double,
issuancePGBP :: Double,
issuancePSGD :: Double,
issuancePPHP :: Double,
issuancePJPY :: Double,
issuancePDASH :: Double,
issuancePXAG :: Double,
issuancePXBC :: Double,
issuancePFCT :: Double,
issuancePXLM :: Double,
issuancePETH :: Double
} deriving (Show,Eq,GHC.Generics.Generic)
instance FromJSON Issuance where
parseJSON (Object v) =
Issuance
<$> 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 Issuance where
toJSON (Issuance {..}) = object
[ "pBRL" .= issuancePBRL
, "pRVN" .= issuancePRVN
, "pEUR" .= issuancePEUR
, "pUSD" .= issuancePUSD
, "PEG" .= issuancePEG
, "pCHF" .= issuancePCHF
, "pDCR" .= issuancePDCR
, "pLTC" .= issuancePLTC
, "pMXN" .= issuancePMXN
, "pKRW" .= issuancePKRW
, "pXBT" .= issuancePXBT
, "pBNB" .= issuancePBNB
, "pCAD" .= issuancePCAD
, "pZEC" .= issuancePZEC
, "pXAU" .= issuancePXAU
, "pADA" .= issuancePADA
, "pCNY" .= issuancePCNY
, "pXMR" .= issuancePXMR
, "pHKD" .= issuancePHKD
, "pINR" .= issuancePINR
, "pGBP" .= issuancePGBP
, "pSGD" .= issuancePSGD
, "pPHP" .= issuancePPHP
, "pJPY" .= issuancePJPY
, "pDASH" .= issuancePDASH
, "pXAG" .= issuancePXAG
, "pXBC" .= issuancePXBC
, "pFCT" .= issuancePFCT
, "pXLM" .= issuancePXLM
, "pETH" .= issuancePETH
]
toEncoding (Issuance {..}) = pairs
( "pBRL"
.= issuancePBRL
<> "pRVN"
.= issuancePRVN
<> "pEUR"
.= issuancePEUR
<> "pUSD"
.= issuancePUSD
<> "PEG"
.= issuancePEG
<> "pCHF"
.= issuancePCHF
<> "pDCR"
.= issuancePDCR
<> "pLTC"
.= issuancePLTC
<> "pMXN"
.= issuancePMXN
<> "pKRW"
.= issuancePKRW
<> "pXBT"
.= issuancePXBT
<> "pBNB"
.= issuancePBNB
<> "pCAD"
.= issuancePCAD
<> "pZEC"
.= issuancePZEC
<> "pXAU"
.= issuancePXAU
<> "pADA"
.= issuancePADA
<> "pCNY"
.= issuancePCNY
<> "pXMR"
.= issuancePXMR
<> "pHKD"
.= issuancePHKD
<> "pINR"
.= issuancePINR
<> "pGBP"
.= issuancePGBP
<> "pSGD"
.= issuancePSGD
<> "pPHP"
.= issuancePPHP
<> "pJPY"
.= issuancePJPY
<> "pDASH"
.= issuancePDASH
<> "pXAG"
.= issuancePXAG
<> "pXBC"
.= issuancePXBC
<> "pFCT"
.= issuancePFCT
<> "pXLM"
.= issuancePXLM
<> "pETH"
.= issuancePETH
)
data Syncstatus = Syncstatus {
syncstatusFactomheight :: Double,
syncstatusSyncheight :: Double
} deriving (Show,Eq,GHC.Generics.Generic)
instance FromJSON Syncstatus where
parseJSON (Object v) =
Syncstatus <$> v .: "factomheight" <*> v .: "syncheight"
parseJSON _ = mzero
instance ToJSON Syncstatus where
toJSON (Syncstatus {..}) = object
[ "factomheight" .= syncstatusFactomheight
, "syncheight" .= syncstatusSyncheight
]
toEncoding (Syncstatus {..}) = pairs
( "factomheight"
.= syncstatusFactomheight
<> "syncheight"
.= syncstatusSyncheight
)
data NetIssuance = NetIssuance {
topLevelIssuance :: Issuance,
topLevelSyncstatus :: Syncstatus
} deriving (Show,Eq,GHC.Generics.Generic)
instance FromJSON NetIssuance where
parseJSON (Object v) = NetIssuance <$> v .: "issuance" <*> v .: "syncstatus"
parseJSON _ = mzero
instance ToJSON NetIssuance where
toJSON (NetIssuance {..}) =
object ["issuance" .= topLevelIssuance, "syncstatus" .= topLevelSyncstatus]
toEncoding (NetIssuance {..}) =
pairs ("issuance" .= topLevelIssuance <> "syncstatus" .= topLevelSyncstatus)