packages feed

calamity-0.1.26.0: Calamity/Types/Model/Guild/Permissions.hs

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE NoDeriveAnyClass #-}

-- | Guild permissions
module Calamity.Types.Model.Guild.Permissions
  ( Permissions (..),
    createInstantInvite,
    kickMembers,
    banMembers,
    administrator,
    manageChannels,
    manageGuild,
    addReactions,
    viewAuditLog,
    prioritySpeaker,
    stream,
    viewChannel,
    sendMessages,
    sendTtsMessages,
    manageMessages,
    embedLinks,
    attachFiles,
    readMessageHistory,
    mentionEveryone,
    useExternalEmojis,
    viewGuildInsights,
    connect,
    speak,
    muteMembers,
    deafenMembers,
    moveMembers,
    useVad,
    changeNickname,
    manageNicknames,
    manageRoles,
    manageWebhooks,
    manageEmojis,
  )
where

import Data.Aeson (FromJSON (..), ToJSON (..))
import Data.Aeson.Types (parseFail)
import Data.Flags ()
import Data.Flags.TH
import Data.Text.Read (decimal)
import Data.Word
import TextShow
import Control.DeepSeq (NFData)

$( bitmaskWrapper
     "Permissions"
     ''Word64
     []
     [ ("createInstantInvite", 0x00000001),
       ("kickMembers", 0x00000002),
       ("banMembers", 0x00000004),
       ("administrator", 0x00000008),
       ("manageChannels", 0x00000010),
       ("manageGuild", 0x00000020),
       ("addReactions", 0x00000040),
       ("viewAuditLog", 0x00000080),
       ("prioritySpeaker", 0x00000100),
       ("stream", 0x00000200),
       ("viewChannel", 0x00000400),
       ("sendMessages", 0x00000800),
       ("sendTtsMessages", 0x00001000),
       ("manageMessages", 0x00002000),
       ("embedLinks", 0x00004000),
       ("attachFiles", 0x00008000),
       ("readMessageHistory", 0x00010000),
       ("mentionEveryone", 0x00020000),
       ("useExternalEmojis", 0x00040000),
       ("viewGuildInsights", 0x00080000),
       ("connect", 0x00100000),
       ("speak", 0x00200000),
       ("muteMembers", 0x00400000),
       ("deafenMembers", 0x00800000),
       ("moveMembers", 0x01000000),
       ("useVad", 0x02000000),
       ("changeNickname", 0x04000000),
       ("manageNicknames", 0x08000000),
       ("manageRoles", 0x10000000),
       ("manageWebhooks", 0x20000000),
       ("manageEmojis", 0x4000000)
     ]
 )

instance ToJSON Permissions where
  toJSON = toJSON . showt
  toEncoding = toEncoding . showt

instance FromJSON Permissions where
  parseJSON a = do
    asText <- parseJSON a
    case decimal asText of
      Right (n, _) -> pure $ Permissions n
      Left e -> parseFail e

deriving via FromStringShow Permissions instance TextShow Permissions
deriving via Word64 instance NFData Permissions