1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, RecordWildCards #-}
module Options
(
CommandLine(..)
, commandLine
, parseCommandLine
, versionInfo
) where
import Data.Data (Data, Typeable)
import Data.Version (showVersion)
import GHC.Generics (Generic)
import Paths_criterion (version)
import Prelude ()
import Prelude.Compat
import Options.Applicative
data CommandLine
= Report { jsonFile :: FilePath, outputFile :: FilePath, templateFile :: FilePath }
| Version
deriving (Eq, Read, Show, Typeable, Data, Generic)
reportOptions :: Parser CommandLine
reportOptions = Report <$> measurements <*> outputFile <*> templateFile
where
measurements = strArgument $ mconcat
[metavar "INPUT-JSON", help "Json file to read Criterion output from."]
outputFile = strArgument $ mconcat
[metavar "OUTPUT-FILE", help "File to output formatted report too."]
templateFile = strOption $ mconcat
[ long "template", short 't', metavar "FILE", value "default",
help "Template to use for report." ]
parseCommand :: Parser CommandLine
parseCommand =
(Version <$ switch (long "version" <> help "Show version info")) <|>
(subparser $
command "report" (info reportOptions (progDesc "Generate report.")))
commandLine :: ParserInfo CommandLine
commandLine = info (helper <*> parseCommand) $
header versionInfo <>
fullDesc
parseCommandLine :: IO CommandLine
parseCommandLine = execParser commandLine
versionInfo :: String
versionInfo = "criterion " ++ showVersion version
|