packages feed

arch-hs-0.0.0.0: diff/Main.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

module Main (main) where

import qualified Colourista as C
import qualified Control.Exception as CE
import Control.Monad (when)
import qualified Data.Map as Map
import qualified Data.Text as T
import Diff
import Distribution.ArchHs.PP (prettyFlagAssignments)
import Distribution.ArchHs.Types

main :: IO ()
main = CE.catch @CE.IOException
  ( do
      Options {..} <- runArgsParser

      let isFlagEmpty = Map.null optFlags
      when isFlagEmpty $ C.skipMessage "You didn't pass -f, different flag values may make difference in dependency resolving."
      when (not isFlagEmpty) $ do
        C.infoMessage "You assigned flags:"
        putStrLn . prettyFlagAssignments $ optFlags

      C.infoMessage "Start running..."
      runDiff optFlags (diffCabal optPackageName optVersionA optVersionB) >>= \case
        Left x -> C.errorMessage $ "Runtime Error: " <> (T.pack . show $ x)
        Right r -> putStrLn r >> C.successMessage "Success!"
  )
  $ \e -> C.errorMessage $ "IOException: " <> (T.pack . show $ e)

runDiff :: FlagAssignments -> Sem '[FlagAssignmentsEnv, WithMyErr, Embed IO, Final IO] a -> IO (Either MyException a)
runDiff flags = runFinal . embedToFinal . errorToIOFinal . (runReader flags)