{-# LANGUAGE DataKinds #-}

module Hercules.API.Agent.Evaluate where

import Data.UUID
import Hercules.API.Agent.Evaluate.DerivationStatus (DerivationStatus)
import Hercules.API.Agent.Evaluate.EvaluateEvent
  ( EvaluateEvent,
  )
import Hercules.API.Agent.Evaluate.EvaluateTask
  ( EvaluateTask,
  )
import Hercules.API.Prelude
import Hercules.API.Task (Task)
import Servant.API

data EvalAPI auth f = EvalAPI
  { forall auth f.
EvalAPI auth f
-> f
   :- ("tasks"
       :> (Capture "taskId" (Id (Task EvaluateTask))
           :> ("eval" :> (auth :> Get '[JSON] EvaluateTask))))
tasksGetEvaluation ::
      f
        :- "tasks"
          :> Capture "taskId" (Id (Task EvaluateTask))
          :> "eval"
          :> auth
          :> Get '[JSON] EvaluateTask,
    forall auth f.
EvalAPI auth f
-> f
   :- ("tasks"
       :> (Capture "taskId" (Id (Task EvaluateTask))
           :> ("eval"
               :> (ReqBody '[JSON] [EvaluateEvent]
                   :> (auth :> Post '[JSON] NoContent)))))
tasksUpdateEvaluation ::
      f
        :- "tasks"
          :> Capture "taskId" (Id (Task EvaluateTask))
          :> "eval"
          :> ReqBody '[JSON] [EvaluateEvent]
          :> auth
          :> Post '[JSON] NoContent,
    forall auth f.
EvalAPI auth f
-> f
   :- ("agent"
       :> ("build"
           :> (Capture "derivationPath" Text
               :> (auth :> Get '[JSON] (Maybe DerivationStatus)))))
getDerivationStatus ::
      f
        :- "agent"
          :> "build"
          :> Capture "derivationPath" Text
          :> auth
          :> Get '[JSON] (Maybe DerivationStatus),
    forall auth f.
EvalAPI auth f
-> f
   :- ("agent"
       :> ("eval-build"
           :> (Capture "derivationPath" Text
               :> (auth :> Get '[JSON] (Maybe (UUID, DerivationStatus))))))
getDerivationStatus2 ::
      f
        :- "agent"
          :> "eval-build"
          :> Capture "derivationPath" Text
          :> auth
          :> Get '[JSON] (Maybe (UUID, DerivationStatus))
  }
  deriving ((forall x. EvalAPI auth f -> Rep (EvalAPI auth f) x)
-> (forall x. Rep (EvalAPI auth f) x -> EvalAPI auth f)
-> Generic (EvalAPI auth f)
forall x. Rep (EvalAPI auth f) x -> EvalAPI auth f
forall x. EvalAPI auth f -> Rep (EvalAPI auth f) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall auth f x. Rep (EvalAPI auth f) x -> EvalAPI auth f
forall auth f x. EvalAPI auth f -> Rep (EvalAPI auth f) x
$cfrom :: forall auth f x. EvalAPI auth f -> Rep (EvalAPI auth f) x
from :: forall x. EvalAPI auth f -> Rep (EvalAPI auth f) x
$cto :: forall auth f x. Rep (EvalAPI auth f) x -> EvalAPI auth f
to :: forall x. Rep (EvalAPI auth f) x -> EvalAPI auth f
Generic)