module GenHeader.Parsers (parseOptions) where import Cardano.Tools.Headers (Options (..)) import Data.Version (showVersion) import Options.Applicative (Parser, ParserInfo, auto, command, execParser, help, helper, hsubparser, info, long, metavar, option, progDesc, short, (<**>)) import Paths_ouroboros_consensus_cardano (version) parseOptions :: IO Options parseOptions :: IO Options parseOptions = ParserInfo Options -> IO Options forall a. ParserInfo a -> IO a execParser ParserInfo Options argsParser argsParser :: ParserInfo Options argsParser :: ParserInfo Options argsParser = Parser Options -> InfoMod Options -> ParserInfo Options forall a. Parser a -> InfoMod a -> ParserInfo a info (Parser Options optionsParser Parser Options -> Parser (Options -> Options) -> Parser Options forall (f :: * -> *) a b. Applicative f => f a -> f (a -> b) -> f b <**> Parser (Options -> Options) forall a. Parser (a -> a) helper) ( String -> InfoMod Options forall a. String -> InfoMod a progDesc (String -> InfoMod Options) -> String -> InfoMod Options forall a b. (a -> b) -> a -> b $ [String] -> String unlines [ String "gen-header - A utility to generate valid and invalid Praos headers for testing purpose" , String "version: " String -> String -> String forall a. Semigroup a => a -> a -> a <> Version -> String showVersion Version version ] ) optionsParser :: Parser Options optionsParser :: Parser Options optionsParser = Mod CommandFields Options -> Parser Options forall a. Mod CommandFields a -> Parser a hsubparser ( String -> ParserInfo Options -> Mod CommandFields Options forall a. String -> ParserInfo a -> Mod CommandFields a command String "generate" (Parser Options -> InfoMod Options -> ParserInfo Options forall a. Parser a -> InfoMod a -> ParserInfo a info Parser Options generateOptionsParser (String -> InfoMod Options forall a. String -> InfoMod a progDesc String "Generate Praos headers context and valid/invalid headers. Writes JSON formatted context to stdout and headers to stdout.")) Mod CommandFields Options -> Mod CommandFields Options -> Mod CommandFields Options forall a. Semigroup a => a -> a -> a <> String -> ParserInfo Options -> Mod CommandFields Options forall a. String -> ParserInfo a -> Mod CommandFields a command String "validate" (Parser Options -> InfoMod Options -> ParserInfo Options forall a. Parser a -> InfoMod a -> ParserInfo a info Parser Options validateOptionsParser (String -> InfoMod Options forall a. String -> InfoMod a progDesc String "Validate a sample of Praos headers within a context. Reads JSON formatted sample from stdin.")) ) validateOptionsParser :: Parser Options validateOptionsParser :: Parser Options validateOptionsParser = Options -> Parser Options forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure Options Validate generateOptionsParser :: Parser Options generateOptionsParser :: Parser Options generateOptionsParser = Int -> Options Generate (Int -> Options) -> Parser Int -> Parser Options forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser Int countParser countParser :: Parser Int countParser :: Parser Int countParser = ReadM Int -> Mod OptionFields Int -> Parser Int forall a. ReadM a -> Mod OptionFields a -> Parser a option ReadM Int forall a. Read a => ReadM a auto ( String -> Mod OptionFields Int forall (f :: * -> *) a. HasName f => String -> Mod f a long String "count" Mod OptionFields Int -> Mod OptionFields Int -> Mod OptionFields Int forall a. Semigroup a => a -> a -> a <> Char -> Mod OptionFields Int forall (f :: * -> *) a. HasName f => Char -> Mod f a short Char 'c' Mod OptionFields Int -> Mod OptionFields Int -> Mod OptionFields Int forall a. Semigroup a => a -> a -> a <> String -> Mod OptionFields Int forall (f :: * -> *) a. HasMetavar f => String -> Mod f a metavar String "INT" Mod OptionFields Int -> Mod OptionFields Int -> Mod OptionFields Int forall a. Semigroup a => a -> a -> a <> String -> Mod OptionFields Int forall (f :: * -> *) a. String -> Mod f a help String "Number of headers to generate" )