packages feed

vcs-ignore-0.1.0.0: app/Main/Options.hs

{-# LANGUAGE StrictData #-}

-- |
-- Module      : Main.Options
-- Description : Options definitions for "optparse-applicative"
-- Copyright   : (c) 2020-2026 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")