packages feed

hix-0.9.0: lib/Hix/Managed/Lower/App.hs

module Hix.Managed.Lower.App where

import Hix.Data.Monad (M)
import qualified Hix.Data.Options
import Hix.Data.Options (LowerOptions)
import Hix.Managed.App (managedApp)
import Hix.Managed.Data.LowerConfig (LowerConfig, lowerConfig)
import Hix.Managed.Data.ProjectContext (ProjectContext)
import Hix.Managed.Data.ProjectResult (ProjectResult)
import Hix.Managed.Handlers.Build (BuildHandlers)
import Hix.Managed.Handlers.Context (ContextKey (ContextManaged), jsonOrQueryProd)
import Hix.Managed.Lower.Auto (lowerAutoMain)
import Hix.Managed.Lower.Init (lowerInitMain)
import Hix.Managed.Lower.Optimize (lowerOptimizeMain)
import Hix.Managed.Lower.Stabilize (lowerStabilizeMain)
import Hix.Managed.ProjectContext (processProjectResult)

lowerApp ::
  (LowerConfig -> BuildHandlers -> ProjectContext -> M ProjectResult) ->
  LowerOptions ->
  M ProjectResult
lowerApp main opts = do
  context <- jsonOrQueryProd ContextManaged opts.common.context
  managedApp opts.common context (main (lowerConfig opts))

lowerCli ::
  (LowerConfig -> BuildHandlers -> ProjectContext -> M ProjectResult) ->
  LowerOptions ->
  M ()
lowerCli main opts =
  processProjectResult =<< lowerApp main opts

lowerInitCli :: LowerOptions -> M ()
lowerInitCli = lowerCli lowerInitMain

lowerOptimizeCli :: LowerOptions -> M ()
lowerOptimizeCli = lowerCli (const lowerOptimizeMain)

lowerStabilizeCli :: LowerOptions -> M ()
lowerStabilizeCli = lowerCli (const lowerStabilizeMain)

lowerAutoCli :: LowerOptions -> M ()
lowerAutoCli = lowerCli lowerAutoMain