1 {-# LANGUAGE NamedFieldPuns #-}
2 {-# LANGUAGE TupleSections #-}
3 module Hcompta.CLI.Command where
5 import System.Console.GetOpt
9 import System.Environment (getProgName)
10 import System.Exit (exitWith, ExitCode(..))
11 import qualified System.IO as IO
13 import Hcompta.CLI.Context (Context)
14 import qualified Hcompta.CLI.Args as Args
15 import qualified Hcompta.CLI.Command.Balance as Command.Balance
16 import qualified Hcompta.CLI.Command.Print as Command.Print
17 import qualified Hcompta.CLI.Context as Context
18 import qualified Hcompta.CLI.Write as Write
25 , " "++bin++" [option..] <command> [arguments]"
27 , usageInfo "OPTIONS" options
33 options :: Args.Options Context
37 usage >>= IO.hPutStr IO.stderr
38 exitWith ExitSuccess))
40 , Option "v" ["verbose"]
41 (NoArg (\context -> return $ context{Context.verb=True}))
42 "show intermediate results"
44 (OptArg (\arg context -> do
46 Nothing -> return $ Just True
47 Just "always" -> return $ Just True
48 Just "never" -> return $ Just False
49 Just "auto" -> return $ Nothing
50 Just _ -> Write.fatal context "--color option expects \"always\", \"auto\", or \"never\" as value"
51 return $ context{Context.color})
52 "[always|auto|never]")
56 run :: Context -> String -> [String] -> IO ()
57 run context cmd args =
59 "print" -> Command.Print.run context args
60 "balance" -> Command.Balance.run context args
61 _ -> usage >>= Write.fatal context . (("unknown command: " ++ cmd ++ "\n") ++)