content: {-# LANGUAGE DataKinds         #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE TypeOperators     #-}
  
  module Web.Telegram.API.Bot.API.Payments
    ( -- * Functions
      sendInvoiceM
    , answerShippingQueryM
    , answerPreCheckoutQueryM
      -- * API
    , TelegramBotPaymentsAPI
    , paymentsApi
      -- * Types
    ) where
  
  import           Data.Proxy
  import           Servant.API
  import           Servant.Client
  import           Web.Telegram.API.Bot.API.Core
  import           Web.Telegram.API.Bot.Requests
  import           Web.Telegram.API.Bot.Responses
  
  type TelegramBotPaymentsAPI =
          TelegramToken :> "sendInvoice"
          :> ReqBody '[JSON] SendInvoiceRequest
          :> Post '[JSON] MessageResponse
     :<|> TelegramToken :> "answerShippingQuery"
          :> ReqBody '[JSON] AnswerShippingQueryRequest
          :> Post '[JSON] AnswerShippingQueryResponse
     :<|> TelegramToken :> "answerPreCheckoutQuery"
          :> ReqBody '[JSON] AnswerPreCheckoutQueryRequest
          :> Post '[JSON] AnswerPreCheckoutQueryResponse
  
  paymentsApi :: Proxy TelegramBotPaymentsAPI
  paymentsApi = Proxy
  
  sendInvoice_ :: Token -> SendInvoiceRequest -> ClientM MessageResponse
  answerShippingQuery_ :: Token -> AnswerShippingQueryRequest -> ClientM AnswerShippingQueryResponse
  answerPreCheckoutQuery_ :: Token -> AnswerPreCheckoutQueryRequest -> ClientM AnswerPreCheckoutQueryResponse
  sendInvoice_
    :<|> answerShippingQuery_
    :<|> answerPreCheckoutQuery_
       = client paymentsApi
  
  sendInvoiceM :: SendInvoiceRequest -> TelegramClient MessageResponse
  sendInvoiceM = run_ sendInvoice_
  
  answerShippingQueryM :: AnswerShippingQueryRequest -> TelegramClient AnswerShippingQueryResponse
  answerShippingQueryM = run_ answerShippingQuery_
  
  answerPreCheckoutQueryM :: AnswerPreCheckoutQueryRequest -> TelegramClient AnswerPreCheckoutQueryResponse
  answerPreCheckoutQueryM = run_ answerPreCheckoutQuery_
  