packages feed

time-warp-1.1.1.0: bench/Network/Receiver/ReceiverOptions.hs

{-# LANGUAGE ScopedTypeVariables #-}

-- | Command line options of pos-node.

module ReceiverOptions
       ( Args (..)
       , argsParser
       ) where

import           Data.Monoid                ((<>))
import           Data.Word                  (Word16)
import           Options.Applicative.Simple (Parser, auto, help, long, metavar, option,
                                             optional, short, showDefault, strOption,
                                             switch, value)

data Args = Args
    { logConfig  :: !(Maybe FilePath)
    , logsPrefix :: !(Maybe FilePath)
    , port       :: !Word16
    , noPong     :: !Bool
    , duration   :: !Int
    }
  deriving Show

--TODO introduce subcommands
argsParser :: Parser Args
argsParser =
    Args <$>
    optional
        (strOption
            (long "log-config"
              <> metavar "FILEPATH" <>
             help "Path to logger configuration")
        )
    <*>
    optional
        (strOption $
         long "logs-prefix" <> metavar "FILEPATH" <> help "Prefix to logger output path")
    <*>
    option
        auto
        (short 'p'
          <> long "port"
          <> metavar "INTEGER"
          <> value 3000
          <> showDefault <>
         help "Port to work on")
    <*>
    switch
        (long "no-pong" <>
         help "Don't send pong")
    <*>
    option
        auto
        (short 'd'
          <> long "duration"
          <> metavar "INTEGER"
          <> value 10
          <> showDefault <>
         help "Time to run before stopping, seconds")