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

import           Calamity.Internal.AesonThings
import           Calamity.Types.Snowflake

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

import           GHC.Generics

import           TextShow
import qualified TextShow.Generic              as TSG

data Role = Role
  { id          :: Snowflake Role
  , name        :: Text
  , color       :: Word64
  , hoist       :: Bool
  , position    :: Int
  , permissions :: Word64
  , 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