packages feed

stackage-cli-0.0.0.4: main/Main.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE TemplateHaskell #-}

module Main where

import           Control.Applicative
import           Control.Exception (catch)
import           Control.Monad
import           Data.Monoid ((<>))    
import           Data.Maybe (isJust)
import           Data.List as List
import           Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.IO as T
import           Stackage.CLI
import           System.Environment
import           System.IO (stderr)
import           System.Exit
import qualified Paths_stackage_cli as CabalInfo

onPluginErr :: PluginException -> IO ()
onPluginErr (PluginNotFound _ name) = do
  T.hPutStr stderr $ "Stackage plugin unavailable: " <> name
  exitFailure
onPluginErr (PluginExitFailure _ i) = do
  exitWith (ExitFailure i)

version :: String
version = $(simpleVersion CabalInfo.version)

main :: IO ()
main = do
  stackage <- findPlugins "stackage"
  args <- getArgs
  case dropWhile (List.isPrefixOf "-") args of
    ((T.pack -> name):args')
      | isJust (lookupPlugin stackage name) ->
          callPlugin stackage name args' `catch` onPluginErr
    _ -> do
      simpleOptions
        version
        "Run stackage commands"
        "Run stackage commands"
        (pure ())
        (commandsFromPlugins stackage)
      return ()