{-# LANGUAGE DeriveAnyClass #-} module Hercules.API.Agent.Evaluate.EvaluateEvent.DerivationInfo where import Control.Applicative import Control.Lens import qualified Data.Aeson as A import Data.Aeson.Lens import Hercules.API.Prelude type OutputNameText = Text type DerivationPathText = Text -- | Derivation fields that are relevant to CI, notably excluding the details -- that make it buildable and may be sensitive such as the builder script or -- output hashes. data DerivationInfo = DerivationInfo { derivationPath :: DerivationPathText, platform :: Text, requiredSystemFeatures :: [Text], inputDerivations :: Map DerivationPathText [OutputNameText], inputSources :: [DerivationPathText], outputs :: Map OutputNameText OutputInfo } deriving (Generic, Show, Eq, NFData, ToJSON) instance FromJSON DerivationInfo where parseJSON = A.genericParseJSON A.defaultOptions . fixup where fixup :: A.Value -> A.Value fixup = _Object . at "requiredSystemFeatures" %~ (<|> Just (A.Array mempty)) data OutputInfo = OutputInfo { path :: Maybe Text, isFixed :: Bool } deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)