module TD.Query.LoadDirectMessagesChatTopics
  (LoadDirectMessagesChatTopics(..)
  , defaultLoadDirectMessagesChatTopics
  ) where

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

-- | Loads more topics in a channel direct messages chat administered by the current user. The loaded topics will be sent through updateDirectMessagesChatTopic. Topics are sorted by their topic.order in descending order. Returns a 404 error if all topics have been loaded. Returns 'TD.Data.Ok.Ok'
data LoadDirectMessagesChatTopics
  = LoadDirectMessagesChatTopics
    { LoadDirectMessagesChatTopics -> Maybe Int
chat_id :: Maybe Int -- ^ Chat identifier of the channel direct messages chat
    , LoadDirectMessagesChatTopics -> Maybe Int
limit   :: Maybe Int -- ^ The maximum number of topics to be loaded. For optimal performance, the number of loaded topics is chosen by TDLib and can be smaller than the specified limit, even if the end of the list is not reached
    }
  deriving (LoadDirectMessagesChatTopics
-> LoadDirectMessagesChatTopics -> Bool
(LoadDirectMessagesChatTopics
 -> LoadDirectMessagesChatTopics -> Bool)
-> (LoadDirectMessagesChatTopics
    -> LoadDirectMessagesChatTopics -> Bool)
-> Eq LoadDirectMessagesChatTopics
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: LoadDirectMessagesChatTopics
-> LoadDirectMessagesChatTopics -> Bool
== :: LoadDirectMessagesChatTopics
-> LoadDirectMessagesChatTopics -> Bool
$c/= :: LoadDirectMessagesChatTopics
-> LoadDirectMessagesChatTopics -> Bool
/= :: LoadDirectMessagesChatTopics
-> LoadDirectMessagesChatTopics -> Bool
Eq, Int -> LoadDirectMessagesChatTopics -> ShowS
[LoadDirectMessagesChatTopics] -> ShowS
LoadDirectMessagesChatTopics -> String
(Int -> LoadDirectMessagesChatTopics -> ShowS)
-> (LoadDirectMessagesChatTopics -> String)
-> ([LoadDirectMessagesChatTopics] -> ShowS)
-> Show LoadDirectMessagesChatTopics
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LoadDirectMessagesChatTopics -> ShowS
showsPrec :: Int -> LoadDirectMessagesChatTopics -> ShowS
$cshow :: LoadDirectMessagesChatTopics -> String
show :: LoadDirectMessagesChatTopics -> String
$cshowList :: [LoadDirectMessagesChatTopics] -> ShowS
showList :: [LoadDirectMessagesChatTopics] -> ShowS
Show)

instance I.ShortShow LoadDirectMessagesChatTopics where
  shortShow :: LoadDirectMessagesChatTopics -> String
shortShow
    LoadDirectMessagesChatTopics
      { chat_id :: LoadDirectMessagesChatTopics -> Maybe Int
chat_id = Maybe Int
chat_id_
      , limit :: LoadDirectMessagesChatTopics -> Maybe Int
limit   = Maybe Int
limit_
      }
        = String
"LoadDirectMessagesChatTopics"
          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
"limit"   String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
limit_
          ]

instance AT.ToJSON LoadDirectMessagesChatTopics where
  toJSON :: LoadDirectMessagesChatTopics -> Value
toJSON
    LoadDirectMessagesChatTopics
      { chat_id :: LoadDirectMessagesChatTopics -> Maybe Int
chat_id = Maybe Int
chat_id_
      , limit :: LoadDirectMessagesChatTopics -> Maybe Int
limit   = Maybe Int
limit_
      }
        = [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
"loadDirectMessagesChatTopics"
          , 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
"limit"   Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Int
limit_
          ]

defaultLoadDirectMessagesChatTopics :: LoadDirectMessagesChatTopics
defaultLoadDirectMessagesChatTopics :: LoadDirectMessagesChatTopics
defaultLoadDirectMessagesChatTopics =
  LoadDirectMessagesChatTopics
    { chat_id :: Maybe Int
chat_id = Maybe Int
forall a. Maybe a
Nothing
    , limit :: Maybe Int
limit   = Maybe Int
forall a. Maybe a
Nothing
    }