packages feed

gltf-loader-0.3.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 False
  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 binaryOption
  <*> switch summaryOption
  <*> switch verboseOption
  <*> strArgument fileArg

binaryOption :: Mod FlagFields Bool
binaryOption = long "binary"
  <> short 'b'
  <> help "Load file as GLB (Binary glTF)"

summaryOption :: Mod FlagFields Bool
summaryOption
  = long "summary"
    <> short 's'
    <> help "Compact output?"

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