packages feed

cabalg-0.2.9: src/Cabalg/Args.hs

module Cabalg.Args where

import           Control.Arrow (second)

data Action
  = Help
  | Version
  | Install [String] (Maybe String)
    deriving (Eq, Show)


-- | Deserialize cabalg action
--
-- >>> fromString ["--version"]
-- Version
--
-- >>> fromString ["--help"]
-- Help
--
-- >>> fromString ["--usage"]
-- Help
--
-- >>> fromString ["-h"]
-- Help
--
-- >>> fromString ["https://url"]
-- Install ["https://url"] Nothing
--
-- >>> fromString ["https://url", "--", "--flags"]
-- Install ["https://url"] (Just "--flags")
fromString :: [String] -> Action
fromString [x] | x `elem` ["--help", "--usage", "-h"] = Help
fromString ["--version"] = Version
fromString x = uncurry Install . second flags . span (/= "--") $ x
 where
  flags [] = Nothing
  flags ["--"] = Nothing
  flags (_:xs) = Just $ unwords xs


printHelp :: IO ()
printHelp = putStrLn $ unlines
  [ "cabalg is an alias for installing cabal package from git source repository."
  , ""
  , "Usage:"
  , "    $ cabalg [--version | [repository url...] [-- [cabal-install args...]]]"
  , ""
  , "Example:"
  , "    $ cabalg https://github.com/biegunka/biegunka@f524f97"
  ]