hix-0.7.0: lib/Hix/Managed/StateFile.hs
module Hix.Managed.StateFile where
import qualified Data.Map.Strict as Map
import Exon (exon)
import Path (Abs, Dir, Path)
import Hix.Class.EncodeNix (encodeNix)
import Hix.Data.Monad (M)
import Hix.Data.NixExpr (Expr (..), ExprAttr (..))
import Hix.Data.Overrides (Overrides)
import qualified Hix.Log as Log
import Hix.Managed.Data.EnvContext (EnvContext)
import qualified Hix.Managed.Data.EnvState
import Hix.Managed.Data.EnvState (EnvState)
import Hix.Managed.Data.Initial (Initial (Initial))
import Hix.Managed.Data.ProjectState (ProjectState)
import qualified Hix.Managed.Handlers.StateFile
import Hix.Managed.Handlers.StateFile (StateFileHandlers)
import Hix.Managed.UpdateState (envStateForBuild)
import Hix.NixExpr (renderRootExpr)
renderMap ::
Coercible k Text =>
(v -> Expr) ->
Map k v ->
Expr
renderMap v =
ExprAttrs . fmap (uncurry ExprAttr . bimap coerce v) . Map.toList
renderManaged' :: ProjectState -> Expr
renderManaged' =
encodeNix
writeStateFile ::
Text ->
StateFileHandlers ->
Maybe (Path Abs Dir) ->
ProjectState ->
M ()
writeStateFile purpose handlers tmpRoot state = do
Log.debug [exon|writing managed stated file for #{purpose}: #{renderRootExpr expr}|]
handlers.writeFile tmpRoot expr
where
expr = encodeNix state
writeProjectState ::
StateFileHandlers ->
ProjectState ->
M ()
writeProjectState handlers newState =
writeStateFile "final result persistence" handlers Nothing newState
writeBuildStateFor ::
Text ->
StateFileHandlers ->
Path Abs Dir ->
EnvContext ->
Overrides ->
M ()
writeBuildStateFor purpose handlers tmpRoot context overrides =
writeStateFile purpose handlers (Just tmpRoot) (envStateForBuild context overrides)
writeInitialEnvState ::
StateFileHandlers ->
Path Abs Dir ->
EnvContext ->
Initial EnvState ->
M ()
writeInitialEnvState handlers tmpRoot context (Initial state) =
writeBuildStateFor "env initialization" handlers tmpRoot context state.overrides