dhall-haskell/dhall-text/exec/Main.hs

64 lines
1.9 KiB
Haskell

{-# LANGUAGE RecordWildCards #-}
import Control.Applicative ((<|>))
import Data.Monoid ((<>))
import Options.Applicative (Parser, ParserInfo)
import qualified Data.Text.IO
import qualified Data.Version
import qualified Dhall
import qualified Options.Applicative
import qualified Paths_dhall_text
data Options
= Default { explain :: Bool }
| Version
parseOptions :: Parser Options
parseOptions = parseVersion <|> parseDefault
where
parseVersion =
Options.Applicative.subparser
( Options.Applicative.command "version" parserInfoVersion
<> Options.Applicative.metavar "version"
)
where
parserInfoVersion =
Options.Applicative.info parser
( Options.Applicative.fullDesc
<> Options.Applicative.progDesc "Display version"
)
parser =
Options.Applicative.helper <*> pure Version
parseDefault = Default <$> parseExplain
where
parseExplain =
Options.Applicative.switch
( Options.Applicative.long "explain"
<> Options.Applicative.help "Explain error messages in detail"
)
parserInfoOptions :: ParserInfo Options
parserInfoOptions =
Options.Applicative.info
(Options.Applicative.helper <*> parseOptions)
( Options.Applicative.progDesc "Template text using Dhall"
<> Options.Applicative.fullDesc
)
main :: IO ()
main = do
options <- Options.Applicative.execParser parserInfoOptions
case options of
Default {..} -> do
let detail = if explain then Dhall.detailed else id
code <- Data.Text.IO.getContents
text <- detail (Dhall.input Dhall.auto code)
Data.Text.IO.putStr text
Version -> do
putStrLn (Data.Version.showVersion Paths_dhall_text.version)