packages feed

calamity-0.8.0.0: Calamity/Types/Model/Guild/Ban.hs

{-# LANGUAGE TemplateHaskell #-}

-- | Guild ban objects
module Calamity.Types.Model.Guild.Ban (BanData (..)) where

import Calamity.Types.Model.Guild.Guild
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Data.Aeson ((.:))
import Data.Aeson qualified as Aeson
import Optics.TH
import TextShow.TH

data BanData = BanData
  { guildID :: Snowflake Guild
  , user :: User
  }
  deriving (Show)
  deriving (HasID Guild) via HasIDField "guildID" BanData
  deriving (HasID User) via HasIDField "user" BanData

instance Aeson.FromJSON BanData where
  parseJSON = Aeson.withObject "BanData" $ \v ->
    BanData
      <$> v .: "guild_id"
      <*> v .: "user"

$(deriveTextShow ''BanData)
$(makeFieldLabelsNoPrefix ''BanData)