vcs-ignore-0.0.2.0: app/Main/Options.hs
{-# LANGUAGE StrictData #-}
{-|
Module : Main.Options
Description : Options definitions for "optparse-applicative"
Copyright : (c) 2020-2022 Vaclav Svejcar
License : BSD-3-Clause
Maintainer : vaclav.svejcar@gmail.com
Stability : experimental
Portability : POSIX
Options definitions for "optparse-applicative".
-}
module Main.Options
( Options(..)
, Mode(..)
, optionsParser
)
where
import Main.Vendor ( buildVersion
, productDesc
, productInfo
)
import Options.Applicative
data Options = Options
{ oMode :: Mode
, oDebug :: Bool
}
deriving (Eq, Show)
data Mode = Path FilePath
deriving (Eq, Show)
optionsParser :: ParserInfo Options
optionsParser = info (options <**> versionP <**> helper)
(fullDesc <> progDesc productDesc <> header productInfo)
where
options =
Options
<$> ( Path
<$> strOption
(long "path" <> short 'p' <> metavar "PATH" <> help
"path to check"
)
)
<*> switch (long "debug" <> help "produce more verbose output")
versionP :: Parser (a -> a)
versionP = versionInfoP <*> versionNumP
where
versionInfoP = infoOption
productInfo
(long "version" <> short 'v' <> help "show version info")
versionNumP = infoOption
buildVersion
(long "numeric-version" <> help "show only version number")