packages feed

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

{-# LANGUAGE TemplateHaskell #-}

-- | Guilds that are unavailable
module Calamity.Types.Model.Guild.UnavailableGuild (UnavailableGuild (..)) where

import Calamity.Internal.Utils
import Calamity.Types.Model.Guild.Guild
import Calamity.Types.Snowflake
import Data.Aeson ((.!=), (.:), (.:?))
import Data.Aeson qualified as Aeson
import Optics.TH
import TextShow.TH

data UnavailableGuild = UnavailableGuild
  { id :: Snowflake Guild
  , unavailable :: Bool
  }
  deriving (Eq, Show)
  deriving (HasID Guild) via HasIDField "id" UnavailableGuild
  deriving (Aeson.ToJSON) via CalamityToJSON UnavailableGuild

instance CalamityToJSON' UnavailableGuild where
  toPairs UnavailableGuild {..} =
    [ "id" .= id
    , "unavailable" .= unavailable
    ]

instance Aeson.FromJSON UnavailableGuild where
  parseJSON = Aeson.withObject "UnavailableGuild" $ \v ->
    UnavailableGuild
      <$> v .: "id"
      <*> v .:? "disabled" .!= False

$(deriveTextShow ''UnavailableGuild)
$(makeFieldLabelsNoPrefix ''UnavailableGuild)