module Options where import Options.Applicative data TemplateSource = TemplateFromFile FilePath | TemplateFromStdin data DataSource = DataFromFile FilePath | DataLiteral String | DataFromStdin data Options = RunOptions TemplateSource DataSource parseOptions :: [String] -> IO Options parseOptions args = execParser $ info (options <**> helper) ( fullDesc <> header "ginger - A command-line interface for the Ginger template language" ) options :: Parser Options options = runOptions runOptions :: Parser Options runOptions = RunOptions <$> templateSource <*> dataSource templateSource :: Parser TemplateSource templateSource = convert <$> option str ( long "template" <> short 't' <> metavar "TEMPLATE" <> help "Load ginger template from this file" <> value "-" ) where convert "-" = TemplateFromStdin convert f = TemplateFromFile f dataSource :: Parser DataSource dataSource = dataFromFile <|> dataLiteral dataFromFile :: Parser DataSource dataFromFile = convert <$> option str ( long "data-file" <> metavar "DATAFILE" <> help "Load JSON or YAML data from this file (`-' to read from stdin)" ) where convert "-" = DataFromStdin convert f = DataFromFile f dataLiteral :: Parser DataSource dataLiteral = DataLiteral <$> option str ( long "data" <> short 'd' <> metavar "DATA" <> help "Use specified (JSON or YAML) DATA" <> value "{}" )