packages feed

iris-0.1.0.0: src/Iris/Cli/ParserInfo.hs

{-# LANGUAGE ApplicativeDo #-}
{-# LANGUAGE FlexibleContexts #-}

{- |
Module                  : Iris.Cli.ParserInfo
Copyright               : (c) 2022 Dmitrii Kovanikov
SPDX-License-Identifier : MPL-2.0
Maintainer              : Dmitrii Kovanikov <kovanikov@gmail.com>
Stability               : Experimental
Portability             : Portable

Parser information for the default CLI parser.

@since 0.1.0.0
-}
module Iris.Cli.ParserInfo (cmdParserInfo) where

import Iris.Cli.Interactive (interactiveModeP)
import Iris.Cli.Internal (Cmd (..))
import Iris.Cli.Version (mkVersionParser)
import Iris.Settings (CliEnvSettings (..))

import Iris.Cli.Colour (colourOptionP)
import qualified Options.Applicative as Opt

{- |

@since 0.1.0.0
-}
cmdParserInfo :: forall cmd appEnv. CliEnvSettings cmd appEnv -> Opt.ParserInfo (Cmd cmd)
cmdParserInfo CliEnvSettings{..} =
    Opt.info
        ( Opt.helper
            <*> mkVersionParser cliEnvSettingsVersionSettings
            <*> cmdP
        )
        $ mconcat
            [ Opt.fullDesc
            , Opt.header cliEnvSettingsHeaderDesc
            , Opt.progDesc cliEnvSettingsProgDesc
            ]
  where
    cmdP :: Opt.Parser (Cmd cmd)
    cmdP = do
        cmdInteractiveMode <- interactiveModeP
        cmdCmd <- cliEnvSettingsCmdParser
        cmdColourOption <- colourOptionP

        pure Cmd{..}