{-# LANGUAGE DeriveGeneric #-}
module Telegram.Bot.API.Types.ExternalReplyInfo where

import Data.Aeson (FromJSON (..), ToJSON (..))
import GHC.Generics (Generic)

import Telegram.Bot.API.Internal.Utils
import Telegram.Bot.API.Types.Animation
import Telegram.Bot.API.Types.Audio
import Telegram.Bot.API.Types.Chat
import Telegram.Bot.API.Types.Common
import Telegram.Bot.API.Types.Contact
import Telegram.Bot.API.Types.Dice
import Telegram.Bot.API.Types.Game
import Telegram.Bot.API.Types.Document
import Telegram.Bot.API.Types.Invoice
import Telegram.Bot.API.Types.Location
import Telegram.Bot.API.Types.MessageOrigin
import Telegram.Bot.API.Types.PhotoSize
import Telegram.Bot.API.Types.Poll
import Telegram.Bot.API.Types.Sticker
import Telegram.Bot.API.Types.Story
import Telegram.Bot.API.Types.Venue
import Telegram.Bot.API.Types.Video
import Telegram.Bot.API.Types.VideoNote
import Telegram.Bot.API.Types.Voice


-- ** 'ExternalReplyInfo'

-- | This object contains information about a message that is being replied to, which may come from another chat or forum topic.
data ExternalReplyInfo = ExternalReplyInfo
      { ExternalReplyInfo -> MessageOrigin
externalReplyInfoOrigin :: MessageOrigin -- ^ Origin of the message replied to by the given message.
      , ExternalReplyInfo -> Maybe Chat
externalReplyInfoChat :: Maybe Chat -- ^ Chat the original message belongs to. Available only if the chat is a supergroup or a channel.
      , ExternalReplyInfo -> Maybe MessageId
externalReplyInfoMessageId :: Maybe MessageId -- ^ Unique message identifier inside the original chat. Available only if the original chat is a supergroup or a channel.

      -- , externalReplyInfoLinkPreviewsOptions
      , ExternalReplyInfo -> Maybe Animation
externalReplyInfoAnimation :: Maybe Animation -- ^ Message is an animation, information about the animation.
      , ExternalReplyInfo -> Maybe Audio
externalReplyInfoAudio :: Maybe Audio -- ^ Message is an audio file, information about the file.
      , ExternalReplyInfo -> Maybe Document
externalReplyInfoDocument :: Maybe Document -- ^ Message is a general file, information about the file.
      , ExternalReplyInfo -> Maybe [PhotoSize]
externalReplyInfoPhoto :: Maybe [PhotoSize] -- ^ Message is a photo, available sizes of the photo.
      , ExternalReplyInfo -> Maybe Sticker
externalReplyInfoSticker :: Maybe Sticker -- ^ Message is a sticker, information about the sticker.
      , ExternalReplyInfo -> Maybe Story
externalReplyInfoStory :: Maybe Story -- ^ Message is a forwarded story.
      , ExternalReplyInfo -> Maybe Video
externalReplyInfoVideo :: Maybe Video -- ^ Message is a video, information about the video.
      , ExternalReplyInfo -> Maybe VideoNote
externalReplyInfoVideoNote :: Maybe VideoNote -- ^ Message is a video note, information about the video message
      , ExternalReplyInfo -> Maybe Voice
externalReplyInfoVoice :: Maybe Voice -- ^ Message is a voice message, information about the file
      , ExternalReplyInfo -> Maybe Bool
externalReplyInfoHasMediaSpoiler :: Maybe Bool -- ^ 'True', if the message media is covered by a spoiler animation.
      , ExternalReplyInfo -> Maybe Contact
externalReplyInfoContact :: Maybe Contact -- ^ Message is a shared contact, information about the contact.
      , ExternalReplyInfo -> Maybe Dice
externalReplyInfoDice :: Maybe Dice -- ^ Message is a dice with random value.
      , ExternalReplyInfo -> Maybe Game
externalReplyInfoGame :: Maybe Game -- ^ Message is a game, information about the game.

      -- , externalReplyInfoGiveaway
      -- , externalReplyInfoGiveawayWinners
      , ExternalReplyInfo -> Maybe Invoice
externalReplyInfoInvoice :: Maybe Invoice -- ^ Message is an invoice for a payment, information about the invoice.
      , ExternalReplyInfo -> Maybe Location
externalReplyInfoLocation :: Maybe Location -- ^ Message is a shared location, information about the location.
      , ExternalReplyInfo -> Maybe Poll
externalReplyInfoPoll :: Maybe Poll -- ^ Message is a native poll, information about the poll.
      , ExternalReplyInfo -> Maybe Venue
externalReplyInfoVenue :: Maybe Venue -- ^ Message is a venue, information about the venue.
      }
  deriving ((forall x. ExternalReplyInfo -> Rep ExternalReplyInfo x)
-> (forall x. Rep ExternalReplyInfo x -> ExternalReplyInfo)
-> Generic ExternalReplyInfo
forall x. Rep ExternalReplyInfo x -> ExternalReplyInfo
forall x. ExternalReplyInfo -> Rep ExternalReplyInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ExternalReplyInfo -> Rep ExternalReplyInfo x
from :: forall x. ExternalReplyInfo -> Rep ExternalReplyInfo x
$cto :: forall x. Rep ExternalReplyInfo x -> ExternalReplyInfo
to :: forall x. Rep ExternalReplyInfo x -> ExternalReplyInfo
Generic, Int -> ExternalReplyInfo -> ShowS
[ExternalReplyInfo] -> ShowS
ExternalReplyInfo -> String
(Int -> ExternalReplyInfo -> ShowS)
-> (ExternalReplyInfo -> String)
-> ([ExternalReplyInfo] -> ShowS)
-> Show ExternalReplyInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ExternalReplyInfo -> ShowS
showsPrec :: Int -> ExternalReplyInfo -> ShowS
$cshow :: ExternalReplyInfo -> String
show :: ExternalReplyInfo -> String
$cshowList :: [ExternalReplyInfo] -> ShowS
showList :: [ExternalReplyInfo] -> ShowS
Show)

instance ToJSON   ExternalReplyInfo where toJSON :: ExternalReplyInfo -> Value
toJSON = ExternalReplyInfo -> Value
forall a (d :: Meta) (f :: * -> *).
(Generic a, GToJSON Zero (Rep a), Rep a ~ D1 d f, Datatype d) =>
a -> Value
gtoJSON
instance FromJSON ExternalReplyInfo where parseJSON :: Value -> Parser ExternalReplyInfo
parseJSON = Value -> Parser ExternalReplyInfo
forall a (d :: Meta) (f :: * -> *).
(Generic a, GFromJSON Zero (Rep a), Rep a ~ D1 d f, Datatype d) =>
Value -> Parser a
gparseJSON