packages feed

hix-0.9.0: lib/Hix/Managed/ProjectContext.hs

module Hix.Managed.ProjectContext where

import qualified Hix.Data.Monad
import Hix.Data.Monad (AppResources (AppResources), M)
import qualified Hix.Data.Options
import Hix.Data.Options (ProjectOptions)
import Hix.Managed.BuildOutput (buildOutput, depChanges, outputResult)
import qualified Hix.Managed.Data.BuildConfig
import Hix.Managed.Data.ProjectContext (ProjectContext)
import Hix.Managed.Data.ProjectContextProto (ProjectContextProto)
import qualified Hix.Managed.Data.ProjectResult
import Hix.Managed.Data.ProjectResult (ProjectResult)
import Hix.Managed.Handlers.Project (ProjectHandlers (..))
import qualified Hix.Managed.Handlers.Report
import qualified Hix.Managed.ProjectContextProto as ProjectContextProto
import Hix.Managed.StateFile (writeProjectState)
import Hix.Monad (ask)

updateProject ::
  ProjectHandlers ->
  Bool ->
  ProjectResult ->
  M ()
updateProject handlers validate result = do
  unless validate do
    writeProjectState handlers.stateFile result.state
  handlers.report.mutations result

withProjectContext ::
  ProjectHandlers ->
  ProjectOptions ->
  ProjectContextProto ->
  (ProjectContext -> M ProjectResult) ->
  M ProjectResult
withProjectContext handlers opts proto use = do
  project <- ProjectContextProto.validate opts proto
  result <- use project
  updateProject handlers opts.build.validate result
  pure result

processProjectResult :: ProjectResult -> M ()
processProjectResult result = do
  AppResources {output = format, target} <- ask
  outputResult target format (buildOutput (depChanges result))