{-# 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")