module Calamity.Types.Model.Presence.Presence
( Presence(..)
, ClientStatus(..) ) where
import Calamity.Internal.AesonThings
import {-# SOURCE #-} Calamity.Types.Model.Guild.Guild
import Calamity.Types.Model.Presence.Activity
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Data.Aeson
import qualified Data.Override as O
import Data.Override.Aeson ()
import Data.Text.Lazy ( Text )
import GHC.Generics
import TextShow
import qualified TextShow.Generic as TSG
data Presence = Presence
{ user :: Snowflake User
, game :: Maybe Activity
, guildID :: Snowflake Guild
, status :: StatusType
, clientStatus :: ClientStatus
}
deriving ( Eq, Show, Generic )
deriving ( TextShow ) via TSG.FromGeneric Presence
deriving ( ToJSON, FromJSON ) via CalamityJSON
(O.Override Presence '["user" `O.As` Partial User])
deriving ( HasID User ) via HasIDField "user" Presence
deriving ( HasID Guild ) via HasIDField "guildID" Presence
data ClientStatus = ClientStatus
{ desktop :: Maybe Text
, mobile :: Maybe Text
, web :: Maybe Text
}
deriving ( Eq, Show, Generic )
deriving ( TextShow ) via TSG.FromGeneric ClientStatus
deriving ( ToJSON, FromJSON ) via CalamityJSON ClientStatus