packages feed

gltf-loader-0.1.0.0: app/Main.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
module Main (main) where

import Command.GLTF.Loader
import Paths_gltf_loader

import RIO
import RIO.Process
import Options.Applicative.Simple

main :: IO ()
main = do
  (options', _) <- parseOptions
  logOptions <- logOptionsHandle stderr (optionsVerbose options')
  processContext <- mkDefaultProcessContext

  runApp processContext options' logOptions run

parseOptions :: IO (Options, ())
parseOptions = simpleOptions version' header' description options empty
  where version' = $(simpleVersion version)
        header' = "Header for command line arguments"
        description = "A tool it inspect GlTF files"

runApp
  :: MonadUnliftIO m
  => ProcessContext
  -> Options
  -> LogOptions
  -> RIO App a
  -> m a
runApp processContext cliOptions logOptions appAction
  = withLogFunc logOptions $ \logFunc -> runRIO (mkApp logFunc) appAction
  where mkApp logFunc = App
          { appLogFunc = logFunc,
            appProcessContext = processContext,
            appOptions = cliOptions
          }

options :: Parser Options
options = Options <$> switch verboseOption <*> strArgument fileArg

verboseOption :: Mod FlagFields Bool
verboseOption
  = long "verbose"
    <> short 'v'
    <> help "Verbose output?"

fileArg :: Mod ArgumentFields FilePath
fileArg
  = metavar "file"
    <> help "Name of the GlTF file"
    <> completer (bashCompleter "file")