hercules-ci-api-agent-0.3.1.0: src/Hercules/API/Agent/LifeCycle/AgentInfo.hs
{-# LANGUAGE DeriveAnyClass #-}
module Hercules.API.Agent.LifeCycle.AgentInfo where
import Control.Applicative
import Control.Lens (at, (%~))
import qualified Data.Aeson as A
import Data.Aeson.Lens (_Object)
import Data.Function
import Hercules.API.Prelude
data AgentInfo = AgentInfo
{ hostname :: Text,
agentVersion :: Text,
nixVersion :: Text,
nixClientProtocolVersion :: Int,
nixDaemonProtocolVersion :: Int,
platforms :: [Text],
systemFeatures :: [Text],
cachixPushCaches :: [Text],
pushCaches :: [Text],
substituters :: [Text],
concurrentTasks :: Int,
labels :: Map Text A.Value
}
deriving (Generic, Show, Eq, NFData, ToJSON)
instance FromJSON AgentInfo where
parseJSON = A.genericParseJSON A.defaultOptions . fixup
where
fixup :: A.Value -> A.Value
fixup v =
v
& _Object . at "concurrentTasks" %~ (<|> Just (A.Number 2))
& _Object . at "pushCaches" %~ (<|> Just (A.Array mempty))
& _Object . at "nixClientProtocolVersion" %~ (<|> Just (A.Number 0))
& _Object . at "nixDaemonProtocolVersion" %~ (<|> Just (A.Number 0))
& _Object . at "labels" %~ (<|> Just (A.Object mempty))