calamity-0.5.0.0: Calamity/Types/Model/Guild/Role.hs
{-# LANGUAGE TemplateHaskell #-}
-- | Guild roles
module Calamity.Types.Model.Guild.Role (Role (..)) where
import Calamity.Internal.IntColour
import Calamity.Internal.Utils
import Calamity.Types.Model.Guild.Permissions
import Calamity.Types.Snowflake
import Data.Aeson ((.:))
import qualified Data.Aeson as Aeson
import Data.Colour
import Data.Text (Text)
import Optics.TH
import qualified TextShow
data Role = Role
{ id :: Snowflake Role
, name :: Text
, color :: Colour Double
, hoist :: Bool
, position :: Int
, permissions :: Permissions
, managed :: Bool
, mentionable :: Bool
}
deriving (Eq, Show)
deriving (TextShow.TextShow) via TextShow.FromStringShow Role
deriving (HasID Role) via HasIDField "id" Role
deriving (Aeson.ToJSON) via CalamityToJSON Role
instance CalamityToJSON' Role where
toPairs Role {..} =
[ "id" .= id
, "name" .= name
, "color" .= IntColour color
, "position" .= position
, "permissions" .= permissions
, "managed" .= managed
, "mentionable" .= mentionable
]
instance Aeson.FromJSON Role where
parseJSON = Aeson.withObject "Role" $ \v ->
Role
<$> v .: "id"
<*> v .: "name"
<*> (fromIntColour <$> v .: "color")
<*> v .: "hoist"
<*> v .: "position"
<*> v .: "permissions"
<*> v .: "managed"
<*> v .: "mentionable"
$(makeFieldLabelsNoPrefix ''Role)