packages feed

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'