module Hix.Managed.Build.Single where

import Hix.Data.Monad (M)
import Hix.Data.VersionBounds (exactVersion)
import Hix.Managed.Build (buildConstraints)
import Hix.Managed.Cabal.Data.SolverState (solverState)
import Hix.Managed.Constraints (fromVersions)
import qualified Hix.Managed.Data.EnvContext
import Hix.Managed.Data.EnvContext (EnvContext)
import Hix.Managed.Data.Mutable (MutableVersions)
import Hix.Managed.Data.StageState (BuildStatus (Failure))
import Hix.Managed.Handlers.Build (EnvBuilder)

buildVersions ::
  EnvBuilder ->
  EnvContext ->
  Text ->
  MutableVersions ->
  M BuildStatus
buildVersions :: EnvBuilder
-> EnvContext -> Text -> MutableVersions -> M BuildStatus
buildVersions EnvBuilder
builder EnvContext
context Text
description MutableVersions
versions =
  EnvBuilder
-> EnvContext
-> Text
-> SolverState
-> M (Maybe (Versions, Overrides, BuildStatus))
buildConstraints EnvBuilder
builder EnvContext
context Text
description SolverState
solver M (Maybe (Versions, Overrides, BuildStatus))
-> (Maybe (Versions, Overrides, BuildStatus) -> BuildStatus)
-> M BuildStatus
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \case
    Just (Versions
_, Overrides
_, BuildStatus
status) -> BuildStatus
status
    Maybe (Versions, Overrides, BuildStatus)
Nothing -> BuildStatus
Failure
  where
    solver :: SolverState
solver = Ranges -> EnvDeps -> EnvConstraints -> SolverFlags -> SolverState
solverState EnvContext
context.solverBounds EnvContext
context.deps ((Version -> VersionBounds) -> MutableVersions -> EnvConstraints
fromVersions Version -> VersionBounds
exactVersion MutableVersions
versions) SolverFlags
forall a. Default a => a
def