packages feed

pfile-0.1.0.0: src/PFile/Main.hs

{- |
Module:      PFile.Main
Copyright:   (c) 2024 Illia Shkroba
License:     BSD3
Maintainer:  Illia Shkroba <is@pjwstk.edu.pl>
Stability:   unstable
Portability: non-portable (Non-Unix systems are not supported)

PFile's Main.
-}

{-# 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 = do
  Options {verbose, command} <- execParser parserInfo
  env <- Env.resolve Env.Options {Env.verbose}
  flip runReaderT env do
    Log.info $ Env.description env
    case command of
      New options    -> New.main options
      Switch options -> Switch.main options
      Unpack options -> Unpack.main options
      List options   -> List.main options
      Which options  -> Which.main options