64 lines
1.9 KiB
Haskell
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)
|