{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE NoDeriveAnyClass #-}
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 Control.DeepSeq (NFData)
import Data.Aeson (FromJSON (..), ToJSON (..))
import Data.Aeson.Types (parseFail)
import Data.Bits (Bits (shiftL))
import Data.Flags ()
import Data.Flags.TH
import Data.Text.Read (decimal)
import Data.Word
import TextShow
$( bitmaskWrapper
"Permissions"
''Word64
[]
[ ("createInstantInvite", 1 `shiftL` 0)
, ("kickMembers", 1 `shiftL` 1)
, ("banMembers", 1 `shiftL` 2)
, ("administrator", 1 `shiftL` 3)
, ("manageChannels", 1 `shiftL` 4)
, ("manageGuild", 1 `shiftL` 5)
, ("addReactions", 1 `shiftL` 6)
, ("viewAuditLog", 1 `shiftL` 7)
, ("prioritySpeaker", 1 `shiftL` 8)
, ("stream", 1 `shiftL` 9)
, ("viewChannel", 1 `shiftL` 10)
, ("sendMessages", 1 `shiftL` 11)
, ("sendTtsMessages", 1 `shiftL` 12)
, ("manageMessages", 1 `shiftL` 13)
, ("embedLinks", 1 `shiftL` 14)
, ("attachFiles", 1 `shiftL` 15)
, ("readMessageHistory", 1 `shiftL` 16)
, ("mentionEveryone", 1 `shiftL` 17)
, ("useExternalEmojis", 1 `shiftL` 18)
, ("viewGuildInsights", 1 `shiftL` 19)
, ("connect", 1 `shiftL` 20)
, ("speak", 1 `shiftL` 21)
, ("muteMembers", 1 `shiftL` 22)
, ("deafenMembers", 1 `shiftL` 23)
, ("moveMembers", 1 `shiftL` 24)
, ("useVad", 1 `shiftL` 25)
, ("changeNickname", 1 `shiftL` 26)
, ("manageNicknames", 1 `shiftL` 27)
, ("manageRoles", 1 `shiftL` 28)
, ("manageWebhooks", 1 `shiftL` 29)
, ("manageEmojis", 1 `shiftL` 30)
, ("useApplicationCommands", 1 `shiftL` 31)
, ("requestToSPeak", 1 `shiftL` 32)
, ("manageEvents", 1 `shiftL` 33)
, ("manageThreads", 1 `shiftL` 34)
, ("createPublicThreads", 1 `shiftL` 35)
, ("createPrivateThreads", 1 `shiftL` 36)
, ("useExternalStickers", 1 `shiftL` 37)
, ("sendMessagesInThreads", 1 `shiftL` 38)
, ("useEmbeddedActivities", 1 `shiftL` 39)
, ("moderateMembers", 1 `shiftL` 40)
]
)
instance ToJSON Permissions where
toJSON :: Permissions -> Value
toJSON = forall a. ToJSON a => a -> Value
toJSON forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TextShow a => a -> Text
showt
toEncoding :: Permissions -> Encoding
toEncoding = forall a. ToJSON a => a -> Encoding
toEncoding forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TextShow a => a -> Text
showt
instance FromJSON Permissions where
parseJSON :: Value -> Parser Permissions
parseJSON Value
a = do
Text
asText <- forall a. FromJSON a => Value -> Parser a
parseJSON Value
a
case forall a. Integral a => Reader a
decimal Text
asText of
Right (Word64
n, Text
_) -> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ Word64 -> Permissions
Permissions Word64
n
Left String
e -> forall a. String -> Parser a
parseFail String
e
deriving via FromStringShow Permissions instance TextShow Permissions
deriving via Word64 instance NFData Permissions