werewolf-0.1.0.0: app/Werewolf/Commands/Interpret.hs
{-|
Module : Werewolf.Commands.Interpret
Description : Options and handler for the interpret subcommand.
Copyright : (c) Henry J. Wylde, 2015
License : BSD3
Maintainer : public@hjwylde.com
Options and handler for the interpret subcommand.
-}
{-# LANGUAGE OverloadedStrings #-}
module Werewolf.Commands.Interpret (
-- * Options
Options(..),
-- * Handle
handle,
) where
import Control.Monad.Except
import Data.Text (Text)
import qualified Werewolf.Commands.End as End
import qualified Werewolf.Commands.Help as Help
import qualified Werewolf.Commands.Start as Start
import qualified Werewolf.Commands.Vote as Vote
-- | Options.
data Options = Options
{ args :: [Text]
} deriving (Eq, Show)
-- | Handle.
handle :: MonadIO m => Text -> Options -> m ()
handle callerName (Options args) = interpret callerName args
interpret :: MonadIO m => Text -> [Text] -> m ()
interpret callerName ["end"] = End.handle callerName
interpret callerName ["help"] = Help.handle callerName (Help.Options Nothing)
interpret callerName ("help":["description"]) = Help.handle callerName (Help.Options $ Just Help.Description)
interpret callerName ("help":["rules"]) = Help.handle callerName (Help.Options $ Just Help.Rules)
interpret callerName ("help":["roles"]) = Help.handle callerName (Help.Options $ Just Help.Roles)
interpret callerName ("start":playerNames) = Start.handle callerName (Start.Options playerNames)
interpret callerName ("vote":[targetName]) = Vote.handle callerName (Vote.Options targetName)
interpret callerName _ = Help.handle callerName (Help.Options $ Just Help.Commands)