content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE DeriveGeneric #-}
  {-# LANGUAGE TypeApplications #-}
  {-# LANGUAGE TypeOperators #-}
  module Telegram.Bot.API.Methods.EditChatInviteLink where
  
  import Data.Aeson (FromJSON (..), ToJSON (..))
  import Data.Proxy
  import Data.Text
  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
  
  -- ** 'editChatInviteLink'
  
  -- | Request parameters for 'editChatInviteLink'.
  data EditChatInviteLinkRequest = EditChatInviteLinkRequest
    { editChatInviteLinkChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername)
    , editChatInviteLinkInviteLink :: Text -- ^	The invite link to edit
    , editChatInviteLinkName :: Maybe Text -- ^ Invite link name; 0-32 characters
    , editChatInviteLinkExpireDate :: Maybe Integer -- ^ Point in time (Unix timestamp) when the link will expire
    , editChatInviteLinkMemberLimit :: Maybe Int -- ^ Maximum number of users that can be members of the chat simultaneously after joining the chat via this invite link; 1-99999
    , editChatInviteLinkCreatesJoinRequest :: Maybe Bool -- ^ True, if users joining the chat via the link need to be approved by chat administrators. If True, member_limit can't be specified
    }
    deriving Generic
  
  instance ToJSON   EditChatInviteLinkRequest where toJSON = gtoJSON
  instance FromJSON EditChatInviteLinkRequest where parseJSON = gparseJSON
  
  type EditChatInviteLink = "editChatInviteLink"
    :> ReqBody '[JSON] EditChatInviteLinkRequest
    :> Post '[JSON] (Response ChatInviteLink)
  
  -- | Use this method to edit a non-primary
  --   invite link created by the bot. The
  --   bot must be an administrator in the
  --   chat for this to work and must have
  --   the appropriate administrator rights.
  --   Returns the edited invite link as a ChatInviteLink object.
  editChatInviteLink :: EditChatInviteLinkRequest ->  ClientM (Response ChatInviteLink)
  editChatInviteLink = client (Proxy @EditChatInviteLink)
  
  
  makeDefault ''EditChatInviteLinkRequest
  