packages feed

haskell-debug-adapter-0.0.34.0: app/Main.hs

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"
  ]