packages feed

calamity-0.1.26.0: Calamity/Types/Model/Channel/DM.hs

-- | A DM channel with a single person
module Calamity.Types.Model.Channel.DM (DMChannel (..)) where

import Calamity.Internal.AesonThings
import Calamity.Internal.Utils ()
import {-# SOURCE #-} Calamity.Types.Model.Channel
import {-# SOURCE #-} Calamity.Types.Model.Channel.Message
import Calamity.Types.Model.User
import Calamity.Types.Snowflake

import Data.Aeson
import Data.Time
import Data.Vector.Unboxing (Vector)

import GHC.Generics

import Control.DeepSeq (NFData)
import TextShow
import qualified TextShow.Generic as TSG

data DMChannel = DMChannel
  { id :: Snowflake DMChannel
  , lastMessageID :: Maybe (Snowflake Message)
  , lastPinTimestamp :: Maybe UTCTime
  , recipients :: Vector (Snowflake User)
  }
  deriving (Show, Eq, Generic, NFData)
  deriving (TextShow) via TSG.FromGeneric DMChannel
  deriving
    (FromJSON)
    via WithSpecialCases
          '["recipients" `ExtractArrayField` "id"]
          DMChannel
  deriving (HasID DMChannel) via HasIDField "id" DMChannel
  deriving (HasID Channel) via HasIDFieldCoerce' "id" DMChannel