smith-cli-0.0.1: src/Smith/Cli/Parser.hs
-- |
-- 'Options.Applicative' based parsers for use within
-- the command line tools. This are centralised to
-- help with consistency across various commands.
--
-- This module is designed to be import qualified.
--
-- > import qualified Smith.Cli.Parser as Parser
--
module Smith.Cli.Parser (
-- * flags
environment
, principal
-- * arguments
, program
) where
import Control.Applicative (many)
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Options.Applicative as Options
import Smith.Cli.Data.Program (Program (..))
import Smith.Client.Data.Environment (Environment (..))
import Smith.Client.Data.CertificateRequest (Principal (..))
environment :: Options.Parser Environment
environment =
fmap Environment . fmap Text.pack . Options.strOption . mconcat $ [
Options.long "environment"
, Options.short 'e'
, Options.metavar "ENVIRONMENT"
]
-- CONSIDER: 'user' alias or similar.
principal :: Options.Parser Principal
principal =
fmap Principal . fmap Text.pack . Options.strOption . mconcat $ [
Options.long "principal"
, Options.short 'p'
, Options.metavar "PRINCIPAL"
]
program :: Options.Parser Program
program =
Program
<$> programName
<*> many programArgument
programName :: Options.Parser Text
programName =
fmap Text.pack . Options.strArgument . mconcat $ [
Options.metavar "PROGRAM"
, Options.help "Program to execute."
]
programArgument :: Options.Parser Text
programArgument =
fmap Text.pack . Options.strArgument . mconcat $ [
Options.metavar "ARGUMENT"
, Options.help "Argument to provided program."
]