packages feed

calamity-commands-0.4.0.0: CalamityCommands/Handler.hs

{-# LANGUAGE TemplateHaskell #-}

-- | 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 Optics.TH
import qualified TextShow
import TextShow.TH (deriveTextShow)

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)
  }

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

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

$(deriveTextShow ''CommandHandlerS)

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

$(makeFieldLabelsNoPrefix ''CommandHandler)