api-rpc-accumulate-0.1.0.0: src/Accumulate/RPC/Types/ApiDataVersionResponse.hs
{-# LANGUAGE StrictData #-}
{-# LANGUAGE OverloadedStrings #-}
module Accumulate.RPC.Types.ApiDataVersionResponse
( APIDataVersionResponse (..)
, Data (..)
, decodeTopLevel
) where
import Data.Aeson
import Data.Aeson.Types (emptyObject)
import Data.ByteString.Lazy (ByteString)
import Data.HashMap.Strict (HashMap)
import Data.Text (Text)
data APIDataVersionResponse = APIDataVersionResponse
{ apiDataVersionResponseDataAPIDataVersionResponse :: Data
, sponsorAPIDataVersionResponse :: Text
, keyPageAPIDataVersionResponse :: Maybe Text
, apiDataVersionResponseTypeAPIDataVersionResponse :: Text
} deriving (Show)
data Data = Data
{ versionIsKnownData :: Bool
, versionData :: Text
, commitData :: Text
} deriving (Show)
decodeTopLevel :: ByteString -> Maybe APIDataVersionResponse
decodeTopLevel = decode
instance ToJSON APIDataVersionResponse where
toJSON (APIDataVersionResponse apiDataVersionResponseDataAPIDataVersionResponse sponsorAPIDataVersionResponse keyPageAPIDataVersionResponse apiDataVersionResponseTypeAPIDataVersionResponse) =
object
[ "data" .= apiDataVersionResponseDataAPIDataVersionResponse
, "sponsor" .= sponsorAPIDataVersionResponse
, "keyPage" .= keyPageAPIDataVersionResponse
, "type" .= apiDataVersionResponseTypeAPIDataVersionResponse
]
instance FromJSON APIDataVersionResponse where
parseJSON (Object v) = APIDataVersionResponse
<$> v .: "data"
<*> v .: "sponsor"
<*> v .: "keyPage"
<*> v .: "type"
instance ToJSON Data where
toJSON (Data versionIsKnownData versionData commitData) =
object
[ "versionIsKnown" .= versionIsKnownData
, "version" .= versionData
, "commit" .= commitData
]
instance FromJSON Data where
parseJSON (Object v) = Data
<$> v .: "versionIsKnown"
<*> v .: "version"
<*> v .: "commit"