packages feed

imp-1.0.2.0: source/library/Imp/Type/Context.hs

module Imp.Type.Context where

import qualified Control.Monad as Monad
import qualified Control.Monad.Catch as Exception
import qualified Data.Map as Map
import qualified Imp.Exception.ShowHelp as ShowHelp
import qualified Imp.Exception.ShowVersion as ShowVersion
import qualified Imp.Type.Alias as Alias
import qualified Imp.Type.Config as Config
import qualified Imp.Type.Package as Package
import qualified Imp.Type.PackageName as PackageName
import qualified Imp.Type.Source as Source
import qualified Imp.Type.Target as Target

data Context = Context
  { aliases :: Map.Map Target.Target Source.Source,
    packages :: Map.Map Target.Target PackageName.PackageName
  }
  deriving (Eq, Show)

fromConfig :: (Exception.MonadThrow m) => Config.Config -> m Context
fromConfig config = do
  Monad.when (Config.help config) $ Exception.throwM ShowHelp.new
  Monad.when (Config.version config) $ Exception.throwM ShowVersion.new
  pure
    Context
      { aliases = Alias.toMap $ Config.aliases config,
        packages = Package.toMap $ Config.packages config
      }