-- | Updated messages
module Calamity.Types.Model.Channel.UpdatedMessage
    ( UpdatedMessage(..)
     ) where

import           Calamity.Internal.AesonThings
import           Calamity.Internal.Utils          ()
import           Calamity.Types.Model.Channel
import           Calamity.Types.Model.Guild.Role
import           Calamity.Types.Model.User
import           Calamity.Types.Snowflake

import           Data.Aeson
import           Data.Text.Lazy                   ( Text )
import           Data.Time
import qualified Data.Vector.Unboxed              as UV

import           GHC.Generics

import           TextShow
import qualified TextShow.Generic                 as TSG

data UpdatedMessage = UpdatedMessage
  { UpdatedMessage -> Snowflake Message
id              :: Snowflake Message
  , UpdatedMessage -> Snowflake Channel
channelID       :: Snowflake Channel
  , UpdatedMessage -> Maybe Text
content         :: Maybe Text
  , UpdatedMessage -> Maybe UTCTime
editedTimestamp :: Maybe UTCTime
  , UpdatedMessage -> Maybe Bool
tts             :: Maybe Bool
  , UpdatedMessage -> Maybe Bool
mentionEveryone :: Maybe Bool
  , UpdatedMessage -> Maybe (Vector (Snowflake User))
mentions        :: Maybe (UV.Vector (Snowflake User))
  , UpdatedMessage -> Maybe (Vector (Snowflake Role))
mentionRoles    :: Maybe (UV.Vector (Snowflake Role))
  , UpdatedMessage -> Maybe (Vector (Snowflake Channel))
mentionChannels :: Maybe (UV.Vector (Snowflake Channel))
  , UpdatedMessage -> Maybe [Attachment]
attachments     :: Maybe [Attachment]
  , UpdatedMessage -> Maybe [Embed]
embeds          :: Maybe [Embed]
  , UpdatedMessage -> Maybe [Reaction]
reactions       :: Maybe [Reaction]
  , UpdatedMessage -> Maybe Bool
pinned          :: Maybe Bool
  }
  deriving ( UpdatedMessage -> UpdatedMessage -> Bool
(UpdatedMessage -> UpdatedMessage -> Bool)
-> (UpdatedMessage -> UpdatedMessage -> Bool) -> Eq UpdatedMessage
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdatedMessage -> UpdatedMessage -> Bool
$c/= :: UpdatedMessage -> UpdatedMessage -> Bool
== :: UpdatedMessage -> UpdatedMessage -> Bool
$c== :: UpdatedMessage -> UpdatedMessage -> Bool
Eq, Int -> UpdatedMessage -> ShowS
[UpdatedMessage] -> ShowS
UpdatedMessage -> String
(Int -> UpdatedMessage -> ShowS)
-> (UpdatedMessage -> String)
-> ([UpdatedMessage] -> ShowS)
-> Show UpdatedMessage
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdatedMessage] -> ShowS
$cshowList :: [UpdatedMessage] -> ShowS
show :: UpdatedMessage -> String
$cshow :: UpdatedMessage -> String
showsPrec :: Int -> UpdatedMessage -> ShowS
$cshowsPrec :: Int -> UpdatedMessage -> ShowS
Show, (forall x. UpdatedMessage -> Rep UpdatedMessage x)
-> (forall x. Rep UpdatedMessage x -> UpdatedMessage)
-> Generic UpdatedMessage
forall x. Rep UpdatedMessage x -> UpdatedMessage
forall x. UpdatedMessage -> Rep UpdatedMessage x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdatedMessage x -> UpdatedMessage
$cfrom :: forall x. UpdatedMessage -> Rep UpdatedMessage x
Generic )
  deriving ( Int -> UpdatedMessage -> Builder
Int -> UpdatedMessage -> Text
Int -> UpdatedMessage -> Text
[UpdatedMessage] -> Builder
[UpdatedMessage] -> Text
[UpdatedMessage] -> Text
UpdatedMessage -> Builder
UpdatedMessage -> Text
UpdatedMessage -> Text
(Int -> UpdatedMessage -> Builder)
-> (UpdatedMessage -> Builder)
-> ([UpdatedMessage] -> Builder)
-> (Int -> UpdatedMessage -> Text)
-> (UpdatedMessage -> Text)
-> ([UpdatedMessage] -> Text)
-> (Int -> UpdatedMessage -> Text)
-> (UpdatedMessage -> Text)
-> ([UpdatedMessage] -> Text)
-> TextShow UpdatedMessage
forall a.
(Int -> a -> Builder)
-> (a -> Builder)
-> ([a] -> Builder)
-> (Int -> a -> Text)
-> (a -> Text)
-> ([a] -> Text)
-> (Int -> a -> Text)
-> (a -> Text)
-> ([a] -> Text)
-> TextShow a
showtlList :: [UpdatedMessage] -> Text
$cshowtlList :: [UpdatedMessage] -> Text
showtl :: UpdatedMessage -> Text
$cshowtl :: UpdatedMessage -> Text
showtlPrec :: Int -> UpdatedMessage -> Text
$cshowtlPrec :: Int -> UpdatedMessage -> Text
showtList :: [UpdatedMessage] -> Text
$cshowtList :: [UpdatedMessage] -> Text
showt :: UpdatedMessage -> Text
$cshowt :: UpdatedMessage -> Text
showtPrec :: Int -> UpdatedMessage -> Text
$cshowtPrec :: Int -> UpdatedMessage -> Text
showbList :: [UpdatedMessage] -> Builder
$cshowbList :: [UpdatedMessage] -> Builder
showb :: UpdatedMessage -> Builder
$cshowb :: UpdatedMessage -> Builder
showbPrec :: Int -> UpdatedMessage -> Builder
$cshowbPrec :: Int -> UpdatedMessage -> Builder
TextShow ) via TSG.FromGeneric UpdatedMessage
  deriving ( Value -> Parser [UpdatedMessage]
Value -> Parser UpdatedMessage
(Value -> Parser UpdatedMessage)
-> (Value -> Parser [UpdatedMessage]) -> FromJSON UpdatedMessage
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [UpdatedMessage]
$cparseJSONList :: Value -> Parser [UpdatedMessage]
parseJSON :: Value -> Parser UpdatedMessage
$cparseJSON :: Value -> Parser UpdatedMessage
FromJSON ) via WithSpecialCases
      '["author" `ExtractFieldFrom` "id", "mentions" `ExtractArrayField` "id",
        "mention_channels" `ExtractArrayField` "id"]
      UpdatedMessage
  deriving ( HasID Message ) via HasIDField "id" UpdatedMessage
  deriving ( HasID Channel ) via HasIDField "channelID" UpdatedMessage