packages feed

hercules-ci-api-agent-0.3.0.0: src/Hercules/API/Agent/LifeCycle/StartInfo.hs

{-# LANGUAGE DeriveAnyClass #-}

module Hercules.API.Agent.LifeCycle.StartInfo where

import Control.Applicative
import Control.Lens (at, (%~))
import qualified Data.Aeson as A
import Data.Aeson.Lens (_Object)
import Hercules.API.Agent.LifeCycle.AgentInfo (AgentInfo)
import Hercules.API.Prelude
import Hercules.API.Task

data Hello = Hello
  { agentInfo :: AgentInfo,
    startInfo :: StartInfo,
    tasksInProgress :: [Id (Task Any)]
  }
  deriving (Generic, Show, Eq, NFData, ToJSON)

instance FromJSON Hello where
  parseJSON = A.genericParseJSON A.defaultOptions . fixup
    where
      fixup :: A.Value -> A.Value
      fixup = _Object . at "tasksInProgress" %~ (<|> Just (A.Array mempty))

data StartInfo = StartInfo
  { id :: Id StartInfo,
    startTime :: UTCTime
  }
  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)