module TD.Query.GetRepliedMessage
  (GetRepliedMessage(..)
  , defaultGetRepliedMessage
  ) where

import qualified Data.Aeson as A
import qualified Data.Aeson.Types as AT
import qualified TD.Lib.Internal as I

-- | Returns information about a non-bundled message that is replied by a given message. Also, returns the pinned message for messagePinMessage, the game message for messageGameScore, the invoice message for messagePaymentSuccessful, the message with a previously set same background for messageChatSetBackground, the giveaway message for messageGiveawayCompleted, the checklist message for messageChecklistTasksDone, messageChecklistTasksAdded, the message with suggested post information for messageSuggestedPostApprovalFailed, messageSuggestedPostApproved, messageSuggestedPostDeclined, messageSuggestedPostPaid, messageSuggestedPostRefunded, the message with the regular gift that was upgraded for messageUpgradedGift with origin of the type upgradedGiftOriginUpgrade, and the topic creation message for topic messages without non-bundled replied message. Returns a 404 error if the message doesn't exist. Returns 'TD.Data.Message.Message'
data GetRepliedMessage
  = GetRepliedMessage
    { GetRepliedMessage -> Maybe Int
chat_id    :: Maybe Int -- ^ Identifier of the chat the message belongs to
    , GetRepliedMessage -> Maybe Int
message_id :: Maybe Int -- ^ Identifier of the reply message
    }
  deriving (GetRepliedMessage -> GetRepliedMessage -> Bool
(GetRepliedMessage -> GetRepliedMessage -> Bool)
-> (GetRepliedMessage -> GetRepliedMessage -> Bool)
-> Eq GetRepliedMessage
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GetRepliedMessage -> GetRepliedMessage -> Bool
== :: GetRepliedMessage -> GetRepliedMessage -> Bool
$c/= :: GetRepliedMessage -> GetRepliedMessage -> Bool
/= :: GetRepliedMessage -> GetRepliedMessage -> Bool
Eq, Int -> GetRepliedMessage -> ShowS
[GetRepliedMessage] -> ShowS
GetRepliedMessage -> String
(Int -> GetRepliedMessage -> ShowS)
-> (GetRepliedMessage -> String)
-> ([GetRepliedMessage] -> ShowS)
-> Show GetRepliedMessage
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GetRepliedMessage -> ShowS
showsPrec :: Int -> GetRepliedMessage -> ShowS
$cshow :: GetRepliedMessage -> String
show :: GetRepliedMessage -> String
$cshowList :: [GetRepliedMessage] -> ShowS
showList :: [GetRepliedMessage] -> ShowS
Show)

instance I.ShortShow GetRepliedMessage where
  shortShow :: GetRepliedMessage -> String
shortShow
    GetRepliedMessage
      { chat_id :: GetRepliedMessage -> Maybe Int
chat_id    = Maybe Int
chat_id_
      , message_id :: GetRepliedMessage -> Maybe Int
message_id = Maybe Int
message_id_
      }
        = String
"GetRepliedMessage"
          String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
I.cc
          [ String
"chat_id"    String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
chat_id_
          , String
"message_id" String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
message_id_
          ]

instance AT.ToJSON GetRepliedMessage where
  toJSON :: GetRepliedMessage -> Value
toJSON
    GetRepliedMessage
      { chat_id :: GetRepliedMessage -> Maybe Int
chat_id    = Maybe Int
chat_id_
      , message_id :: GetRepliedMessage -> Maybe Int
message_id = Maybe Int
message_id_
      }
        = [Pair] -> Value
A.object
          [ Key
"@type"      Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Text -> Value
AT.String Text
"getRepliedMessage"
          , Key
"chat_id"    Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Int
chat_id_
          , Key
"message_id" Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Int
message_id_
          ]

defaultGetRepliedMessage :: GetRepliedMessage
defaultGetRepliedMessage :: GetRepliedMessage
defaultGetRepliedMessage =
  GetRepliedMessage
    { chat_id :: Maybe Int
chat_id    = Maybe Int
forall a. Maybe a
Nothing
    , message_id :: Maybe Int
message_id = Maybe Int
forall a. Maybe a
Nothing
    }