{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
module PegNet.RPC.Types.SyncStatus 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 SyncStatus = SyncStatus {
topLevelFactomheight :: Double,
topLevelSyncheight :: 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" .= topLevelFactomheight
, "syncheight" .= topLevelSyncheight]
toEncoding (SyncStatus {..}) =
pairs ( "factomheight" .= topLevelFactomheight
<> "syncheight" .= topLevelSyncheight)