packages feed

hs-bindgen-1.0.0.0: app/HsBindgen/Cli/Info.hs

-- | @hs-bindgen-cli info@ commands
--
-- Intended for qualified import.
--
-- > import HsBindgen.Cli.Info qualified as Info
module HsBindgen.Cli.Info (
    -- * CLI help
    info
    -- * Commands
  , Cmd(..)
  , parseCmd
    -- * Execution
  , exec
  ) where

import Options.Applicative hiding (info)

import HsBindgen.App
import HsBindgen.Cli.Info.BuiltinMacros qualified as BuiltinMacros
import HsBindgen.Cli.Info.Doxygen qualified as Doxygen
import HsBindgen.Cli.Info.IncludeGraph qualified as IncludeGraph
import HsBindgen.Cli.Info.Instances qualified as Instances
import HsBindgen.Cli.Info.Libclang qualified as Libclang
import HsBindgen.Cli.Info.ResolveHeader qualified as ResolveHeader
import HsBindgen.Cli.Info.UseDeclGraph qualified as UseDeclGraph

{-------------------------------------------------------------------------------
  CLI help
-------------------------------------------------------------------------------}

info :: InfoMod a
info = progDesc "Informational commands, useful when creating bindings"

{-------------------------------------------------------------------------------
  Commands
-------------------------------------------------------------------------------}

-- Ordered lexicographically
data Cmd =
    CmdBuiltinMacros BuiltinMacros.Opts
  | CmdDoxygen       Doxygen.Opts
  | CmdIncludeGraph  IncludeGraph.Opts
  | CmdInstances     ()
  | CmdLibclang      Libclang.Opts
  | CmdResolveHeader ResolveHeader.Opts
  | CmdUseDeclGraph  UseDeclGraph.Opts

parseCmd :: Parser Cmd
parseCmd = subparser $ mconcat [
      cmd
        "builtin-macros"
        CmdBuiltinMacros
        BuiltinMacros.parseOpts
        BuiltinMacros.info
    , cmd
        "doxygen"
        CmdDoxygen
        Doxygen.parseOpts
        Doxygen.info
    , cmd
        "include-graph"
        CmdIncludeGraph
        IncludeGraph.parseOpts
        IncludeGraph.info
    , cmd
        "instances"
        CmdInstances
        (pure ())
        Instances.info
    , cmd
        "libclang"
        CmdLibclang
        Libclang.parseOpts
        Libclang.info
    , cmd
        "resolve-header"
        CmdResolveHeader
        ResolveHeader.parseOpts
        ResolveHeader.info
    , cmd
        "use-decl-graph"
        CmdUseDeclGraph
        UseDeclGraph.parseOpts
        UseDeclGraph.info
    ]

{-------------------------------------------------------------------------------
  Execution
-------------------------------------------------------------------------------}

exec :: GlobalOpts -> Cmd -> IO ()
exec gopts = \case
    CmdBuiltinMacros opts -> BuiltinMacros.exec gopts opts
    CmdDoxygen       opts -> Doxygen.exec       gopts opts
    CmdIncludeGraph  opts -> IncludeGraph.exec  gopts opts
    CmdInstances     ()   -> Instances.exec
    CmdLibclang      opts -> Libclang.exec      gopts opts
    CmdResolveHeader opts -> ResolveHeader.exec gopts opts
    CmdUseDeclGraph  opts -> UseDeclGraph.exec  gopts opts