{-# LANGUAGE LambdaCase #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-| Module : Main Description : Main application launcher Copyright : (c) 2019-2020 Vaclav Svejcar License : BSD-3-Clause Maintainer : vaclav.svejcar@gmail.com Stability : experimental Portability : POSIX Code responsible for booting up the application and parsing command line arguments. -} module Main where import Headroom.Command ( commandParser ) import Headroom.Command.Gen ( commandGen , parseGenMode ) import Headroom.Command.Init ( commandInit ) import Headroom.Command.Run ( commandRun ) import Headroom.Command.Types ( Command(..) , CommandGenOptions(..) , CommandInitOptions(..) , CommandRunOptions(..) ) import Headroom.Types ( HeadroomError(..) ) import Options.Applicative ( execParser ) import RIO import System.IO ( hPutStrLn ) main :: IO () main = do command' <- execParser commandParser catch (bootstrap command') (\ex -> do hPutStrLn stderr $ "ERROR: " <> displayException (ex :: HeadroomError) exitWith $ ExitFailure 1 ) bootstrap :: Command -> IO () bootstrap = \case c@(Gen _ _) -> do cgoGenMode <- parseGenMode c commandGen CommandGenOptions { .. } Init cioLicenseType cioSourcePaths -> commandInit CommandInitOptions { .. } Run croSourcePaths croExcludedPaths croTemplateSource croVariables croRunMode croDebug croDryRun -> commandRun CommandRunOptions { .. }