-- | 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.Unboxing 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