module Main where
import System.Exit
import System.IO
import Control.Exception.Safe
import Options.Applicative
import Paths_haskell_debug_adapter (version)
import Data.Version (showVersion)
import Haskell.Debug.Adapter.Control
-- |
-- Main
--
main :: IO ()
main = getArgs >>= \args -> do
flip catchAny exception
$ flip finally finalize
$ run args stdin stdout
where
finalize = return ()
exception e = print e >> exitFailure
-------------------------------------------------------------------------------
-- |
-- optparse-applicative
--
getArgs :: IO ArgData
getArgs = execParser parseInfo
-- |
--
parseInfo :: ParserInfo ArgData
parseInfo = info (helper <*> verOpt <*> options) $ mconcat
[ fullDesc
, header ""
, footer ""
, progDesc "Please see README.md"
]
-- |
--
verOpt :: Parser (a -> a)
verOpt = infoOption msg $ mconcat
[ short 'v'
, long "version"
, help "Show version"
]
where
msg = "haskell-debug-adapter-" ++ showVersion version
-- |
--
options :: Parser ArgData
options = ArgData
<$> hackageOption
<*> stdioLogFileOption
-- |
--
hackageOption :: Parser (Maybe String)
hackageOption = optional $ strOption $ mconcat
[ long "hackage-version"
, help "hackage version"
]
-- |
--
stdioLogFileOption :: Parser (Maybe FilePath)
stdioLogFileOption = optional $ strOption $ mconcat
[ long "stdio-log-file"
, help "stdio log file"
]