packages feed

calamity-commands-0.1.0.0: CalamityCommands/Handler.hs

-- | A command handler
module CalamityCommands.Handler (CommandHandler (..)) where

import CalamityCommands.AliasType
import CalamityCommands.Command
import CalamityCommands.Group

import qualified Data.HashMap.Lazy as LH
import qualified Data.Text as S

import GHC.Generics

import TextShow
import qualified TextShow.Generic as TSG

data CommandHandler m c a = CommandHandler
    { -- | Top level groups
      groups :: LH.HashMap S.Text (Group m c a, AliasType)
    , -- | Top level commands
      commands :: LH.HashMap S.Text (Command m c a, AliasType)
    }
    deriving (Generic)

data CommandHandlerS m c a = CommandHandlerS
    { groups :: [(S.Text, (Group m c a, AliasType))]
    , commands :: [(S.Text, (Command m c a, AliasType))]
    }
    deriving (Show, Generic)
    deriving (TextShow) via TSG.FromGeneric (CommandHandlerS m c a)

instance Show (CommandHandler m c a) where
    showsPrec d CommandHandler{groups, commands} = showsPrec d $ CommandHandlerS (LH.toList groups) (LH.toList commands)

instance TextShow (CommandHandler m c a) where
    showbPrec d CommandHandler{groups, commands} = showbPrec d $ CommandHandlerS (LH.toList groups) (LH.toList commands)