content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE DeriveGeneric #-}
  {-# LANGUAGE TypeApplications #-}
  {-# LANGUAGE TypeOperators #-}
  module Telegram.Bot.API.Methods.GetChatMenuButton where
  
  import Data.Aeson (FromJSON (..), ToJSON (..))
  import Data.Proxy
  import GHC.Generics (Generic)
  import Servant.API
  import Servant.Client hiding (Response)
  
  import Telegram.Bot.API.Internal.Utils
  import Telegram.Bot.API.MakingRequests
  import Telegram.Bot.API.Types
  import Telegram.Bot.API.Internal.TH
  
  -- ** 'getChatMenuButton'
  
  -- | Request parameters for 'getChatMenuButton'.
  newtype GetChatMenuButtonRequest = GetChatMenuButtonRequest
    { getChatMenuButtonRequestChatId     :: Maybe ChatId     -- ^ Unique identifier for the target private chat. If not specified, default bot's menu button will be returned.
    }
    deriving Generic
  
  instance ToJSON   GetChatMenuButtonRequest where toJSON = gtoJSON
  instance FromJSON GetChatMenuButtonRequest where parseJSON = gparseJSON
  
  type GetChatMenuButton = "getChatMenuButton"
    :> ReqBody '[JSON] GetChatMenuButtonRequest
    :> Post '[JSON] (Response MenuButton)
  
  -- | Use this method to get the current value
  --  of the bot's menu button in a private chat, or the default menu button.
  -- Returns @MenuButton@ on success.
  getChatMenuButton :: GetChatMenuButtonRequest -> ClientM (Response MenuButton)
  getChatMenuButton = client (Proxy @GetChatMenuButton)
  
  makeDefault ''GetChatMenuButtonRequest
  