headroom-0.3.0.0: app/Main.hs
{-# 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 { .. }