{-# 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 qualified Data.Aeson as Aeson
import Optics.TH
import TextShow.TH

data BanData = BanData
  { BanData -> Snowflake Guild
guildID :: Snowflake Guild
  , BanData -> User
user :: User
  }
  deriving (Int -> BanData -> ShowS
[BanData] -> ShowS
BanData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BanData] -> ShowS
$cshowList :: [BanData] -> ShowS
show :: BanData -> String
$cshow :: BanData -> String
showsPrec :: Int -> BanData -> ShowS
$cshowsPrec :: Int -> BanData -> ShowS
Show)
  deriving (HasID Guild) via HasIDField "guildID" BanData
  deriving (HasID User) via HasIDField "user" BanData

instance Aeson.FromJSON BanData where
  parseJSON :: Value -> Parser BanData
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"BanData" forall a b. (a -> b) -> a -> b
$ \Object
v ->
    Snowflake Guild -> User -> BanData
BanData
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id"
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"

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