hs-bindgen-1.0.0.0: app/HsBindgen/Cli.hs
-- | @hs-bindgen-cli@ commands
--
-- Intended for qualified import.
--
-- > import HsBindgen.Cli qualified as Cli
module HsBindgen.Cli (
-- * Commands
Cmd(..)
, parseCmd
-- * Execution
, exec
) where
import Options.Applicative
import HsBindgen.App
import HsBindgen.Cli.BindingSpec qualified as BindingSpec
import HsBindgen.Cli.GenTests qualified as GenTests
import HsBindgen.Cli.Info qualified as Info
import HsBindgen.Cli.Internal qualified as Internal
import HsBindgen.Cli.Preprocess qualified as Preprocess
import HsBindgen.Cli.ToolSupport qualified as ToolSupport
{-------------------------------------------------------------------------------
Commands
-------------------------------------------------------------------------------}
-- Ordered by usage
data Cmd =
CmdPreprocess Preprocess.Opts
| CmdGenTests GenTests.Opts
| CmdBindingSpec BindingSpec.Cmd
| CmdInfo Info.Cmd
| CmdInternal Internal.Cmd
| CmdToolSupport ToolSupport.Cmd
parseCmd :: Parser Cmd
parseCmd = subparser $ mconcat [
cmd "preprocess" CmdPreprocess Preprocess.parseOpts Preprocess.info
, cmd "gen-tests" CmdGenTests GenTests.parseOpts GenTests.info
, cmd "binding-spec" CmdBindingSpec BindingSpec.parseCmd BindingSpec.info
, cmd "info" CmdInfo Info.parseCmd Info.info
, cmd "internal" CmdInternal Internal.parseCmd Internal.info
, cmd_ "tool-support" CmdToolSupport ToolSupport.parseCmd ToolSupport.info
]
{-------------------------------------------------------------------------------
Execution
-------------------------------------------------------------------------------}
exec :: GlobalOpts -> Cmd -> IO ()
exec gopts = \case
CmdPreprocess opts -> Preprocess.exec gopts opts
CmdGenTests opts -> GenTests.exec gopts opts
CmdBindingSpec cmd' -> BindingSpec.exec gopts cmd'
CmdInfo cmd' -> Info.exec gopts cmd'
CmdInternal cmd' -> Internal.exec gopts cmd'
CmdToolSupport cmd' -> ToolSupport.exec gopts cmd'