packages feed

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

-- | Guild roles
module Calamity.Types.Model.Guild.Role (Role (..)) where

import Calamity.Internal.AesonThings
import Calamity.Internal.IntColour ()
import Calamity.Internal.Utils ()
import Calamity.Types.Model.Guild.Permissions
import Calamity.Types.Snowflake

import Data.Aeson
import Data.Colour
import Data.Text.Lazy (Text)

import GHC.Generics

import Control.DeepSeq (NFData (rnf), rwhnf)
import TextShow
import qualified TextShow.Generic as TSG

data Role = Role
  { id :: Snowflake Role
  , name :: Text
  , color :: Colour Double
  , hoist :: Bool
  , position :: Int
  , permissions :: Permissions
  , managed :: Bool
  , mentionable :: Bool
  }
  deriving (Eq, Show, Generic)
  deriving (TextShow) via TSG.FromGeneric Role
  deriving (ToJSON, FromJSON) via CalamityJSON Role
  deriving (HasID Role) via HasIDField "id" Role

instance NFData Role where
  rnf (Role id name color hoist position permissions managed mentionable) =
    rnf id `seq` rnf name `seq` rwhnf color `seq` rnf hoist `seq` rnf position
      `seq` rnf permissions
      `seq` rnf managed
      `seq` rnf mentionable