werewolf-0.3.3.0: app/Main.hs
{-|
Module : Main
Copyright : (c) Henry J. Wylde, 2015
License : BSD3
Maintainer : public@hjwylde.com
-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# OPTIONS_HADDOCK hide, prune #-}
{-# LANGUAGE OverloadedStrings #-}
module Main (
main, handle,
) where
import Data.Text (Text)
import qualified Data.Text as T
import Options.Applicative
import System.Environment
import qualified Werewolf.Commands.End as End
import qualified Werewolf.Commands.Help as Help
import qualified Werewolf.Commands.Interpret as Interpret
import qualified Werewolf.Commands.Quit as Quit
import qualified Werewolf.Commands.See as See
import qualified Werewolf.Commands.Start as Start
import qualified Werewolf.Commands.Status as Status
import qualified Werewolf.Commands.Vote as Vote
import Werewolf.Options
main :: IO ()
main = getArgs >>= run
run :: [String] -> IO ()
run args = handleParseResult (execParserPure werewolfPrefs werewolfInfo args) >>= handle
interpret :: Text -> [Text] -> IO ()
interpret callerName args = do
let result = execParserPure werewolfPrefs werewolfInfo (map T.unpack $ "--caller":callerName:args)
case result of
Success options -> handle options
_ -> handle (Options callerName . Help . Help.Options $ Just Help.Commands)
handle :: Options -> IO ()
handle (Options callerName command) = case command of
End -> End.handle callerName
Help options -> Help.handle callerName options
Interpret (Interpret.Options args) -> interpret callerName args
Quit -> Quit.handle callerName
See options -> See.handle callerName options
Start options -> Start.handle callerName options
Status -> Status.handle callerName
Vote options -> Vote.handle callerName options