{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE NamedFieldPuns #-}
module PFile.Main
( main
) where
import Options.Applicative (execParser)
import PFile.CLI (Command (..), Options (..), parserInfo)
import qualified PFile.Env as Env
import qualified PFile.Log as Log
import qualified PFile.Main.List as List
import qualified PFile.Main.New as New
import qualified PFile.Main.Switch as Switch
import qualified PFile.Main.Unpack as Unpack
import qualified PFile.Main.Which as Which
import Protolude
main :: IO ()
main :: IO ()
main = do
Options {Bool
verbose :: Bool
verbose :: Options -> Bool
verbose, Command
command :: Command
command :: Options -> Command
command} <- ParserInfo Options -> IO Options
forall a. ParserInfo a -> IO a
execParser ParserInfo Options
parserInfo
Env
env <- Options -> IO Env
forall (m :: * -> *). MonadIO m => Options -> m Env
Env.resolve Env.Options {Bool
verbose :: Bool
verbose :: Bool
Env.verbose}
(ReaderT Env IO () -> Env -> IO ())
-> Env -> ReaderT Env IO () -> IO ()
forall a b c. (a -> b -> c) -> b -> a -> c
flip ReaderT Env IO () -> Env -> IO ()
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT Env
env do
Text -> ReaderT Env IO ()
forall (m :: * -> *).
(MonadReader Env m, MonadIO m) =>
Text -> m ()
Log.info (Text -> ReaderT Env IO ()) -> Text -> ReaderT Env IO ()
forall a b. (a -> b) -> a -> b
$ Env -> Text
Env.description Env
env
case Command
command of
New Options
options -> Options -> ReaderT Env IO ()
forall (m :: * -> *).
(MonadReader Env m, MonadIO m) =>
Options -> m ()
New.main Options
options
Switch Options
options -> Options -> ReaderT Env IO ()
forall (m :: * -> *).
(MonadReader Env m, MonadIO m) =>
Options -> m ()
Switch.main Options
options
Unpack Options
options -> Options -> ReaderT Env IO ()
forall (m :: * -> *).
(MonadReader Env m, MonadIO m) =>
Options -> m ()
Unpack.main Options
options
List Options
options -> Options -> ReaderT Env IO ()
forall (m :: * -> *).
(MonadReader Env m, MonadIO m) =>
Options -> m ()
List.main Options
options
Which Options
options -> Options -> ReaderT Env IO ()
forall (m :: * -> *).
(MonadReader Env m, MonadIO m) =>
Options -> m ()
Which.main Options
options