{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE MultiWayIf #-}
-- CHANGE WITH CAUTION: This is a generated code file generated by https://github.com/Haskell-OpenAPI-Code-Generator/Haskell-OpenAPI-Client-Code-Generator.
{-# LANGUAGE OverloadedStrings #-}

-- | Contains the different functions to run the operation postPaymentIntentsIntentCapture
module StripeAPI.Operations.PostPaymentIntentsIntentCapture where

import qualified Control.Monad.Fail
import qualified Control.Monad.Trans.Reader
import qualified Data.Aeson
import qualified Data.Aeson as Data.Aeson.Encoding.Internal
import qualified Data.Aeson as Data.Aeson.Types
import qualified Data.Aeson as Data.Aeson.Types.FromJSON
import qualified Data.Aeson as Data.Aeson.Types.Internal
import qualified Data.Aeson as Data.Aeson.Types.ToJSON
import qualified Data.ByteString.Char8
import qualified Data.ByteString.Char8 as Data.ByteString.Internal
import qualified Data.Either
import qualified Data.Functor
import qualified Data.Scientific
import qualified Data.Text
import qualified Data.Text.Internal
import qualified Data.Time.Calendar as Data.Time.Calendar.Days
import qualified Data.Time.LocalTime as Data.Time.LocalTime.Internal.ZonedTime
import qualified Data.Vector
import qualified GHC.Base
import qualified GHC.Classes
import qualified GHC.Int
import qualified GHC.Show
import qualified GHC.Types
import qualified Network.HTTP.Client
import qualified Network.HTTP.Client as Network.HTTP.Client.Request
import qualified Network.HTTP.Client as Network.HTTP.Client.Types
import qualified Network.HTTP.Simple
import qualified Network.HTTP.Types
import qualified Network.HTTP.Types as Network.HTTP.Types.Status
import qualified Network.HTTP.Types as Network.HTTP.Types.URI
import qualified StripeAPI.Common
import StripeAPI.Types
import qualified Prelude as GHC.Integer.Type
import qualified Prelude as GHC.Maybe

-- | > POST /v1/payment_intents/{intent}/capture
--
-- \<p>Capture the funds of an existing uncaptured PaymentIntent when its status is \<code>requires_capture\<\/code>.\<\/p>
--
-- \<p>Uncaptured PaymentIntents will be canceled exactly seven days after they are created.\<\/p>
--
-- \<p>Learn more about \<a href=\"\/docs\/payments\/capture-later\">separate authorization and capture\<\/a>.\<\/p>
postPaymentIntentsIntentCapture ::
  forall m.
  StripeAPI.Common.MonadHTTP m =>
  -- | intent | Constraints: Maximum length of 5000
  Data.Text.Internal.Text ->
  -- | The request body to send
  GHC.Maybe.Maybe PostPaymentIntentsIntentCaptureRequestBody ->
  -- | Monadic computation which returns the result of the operation
  StripeAPI.Common.StripeT m (Network.HTTP.Client.Types.Response PostPaymentIntentsIntentCaptureResponse)
postPaymentIntentsIntentCapture :: Text
-> Maybe PostPaymentIntentsIntentCaptureRequestBody
-> StripeT m (Response PostPaymentIntentsIntentCaptureResponse)
postPaymentIntentsIntentCapture
  Text
intent
  Maybe PostPaymentIntentsIntentCaptureRequestBody
body =
    (Response ByteString
 -> Response PostPaymentIntentsIntentCaptureResponse)
-> StripeT m (Response ByteString)
-> StripeT m (Response PostPaymentIntentsIntentCaptureResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
GHC.Base.fmap
      ( \Response ByteString
response_0 ->
          (ByteString -> PostPaymentIntentsIntentCaptureResponse)
-> Response ByteString
-> Response PostPaymentIntentsIntentCaptureResponse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
GHC.Base.fmap
            ( (String -> PostPaymentIntentsIntentCaptureResponse)
-> (PostPaymentIntentsIntentCaptureResponse
    -> PostPaymentIntentsIntentCaptureResponse)
-> Either String PostPaymentIntentsIntentCaptureResponse
-> PostPaymentIntentsIntentCaptureResponse
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
Data.Either.either String -> PostPaymentIntentsIntentCaptureResponse
PostPaymentIntentsIntentCaptureResponseError PostPaymentIntentsIntentCaptureResponse
-> PostPaymentIntentsIntentCaptureResponse
forall a. a -> a
GHC.Base.id
                (Either String PostPaymentIntentsIntentCaptureResponse
 -> PostPaymentIntentsIntentCaptureResponse)
-> (ByteString
    -> Either String PostPaymentIntentsIntentCaptureResponse)
-> ByteString
-> PostPaymentIntentsIntentCaptureResponse
forall b c a. (b -> c) -> (a -> b) -> a -> c
GHC.Base.. ( \Response ByteString
response ByteString
body ->
                               if
                                   | (\Status
status_1 -> Status -> Int
Network.HTTP.Types.Status.statusCode Status
status_1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Int
200) (Response ByteString -> Status
forall body. Response body -> Status
Network.HTTP.Client.Types.responseStatus Response ByteString
response) ->
                                     PaymentIntent -> PostPaymentIntentsIntentCaptureResponse
PostPaymentIntentsIntentCaptureResponse200
                                       (PaymentIntent -> PostPaymentIntentsIntentCaptureResponse)
-> Either String PaymentIntent
-> Either String PostPaymentIntentsIntentCaptureResponse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> ( ByteString -> Either String PaymentIntent
forall a. FromJSON a => ByteString -> Either String a
Data.Aeson.eitherDecodeStrict ByteString
body ::
                                                            Data.Either.Either
                                                              GHC.Base.String
                                                              PaymentIntent
                                                        )
                                   | Bool -> Status -> Bool
forall a b. a -> b -> a
GHC.Base.const Bool
GHC.Types.True (Response ByteString -> Status
forall body. Response body -> Status
Network.HTTP.Client.Types.responseStatus Response ByteString
response) ->
                                     Error -> PostPaymentIntentsIntentCaptureResponse
PostPaymentIntentsIntentCaptureResponseDefault
                                       (Error -> PostPaymentIntentsIntentCaptureResponse)
-> Either String Error
-> Either String PostPaymentIntentsIntentCaptureResponse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> ( ByteString -> Either String Error
forall a. FromJSON a => ByteString -> Either String a
Data.Aeson.eitherDecodeStrict ByteString
body ::
                                                            Data.Either.Either
                                                              GHC.Base.String
                                                              Error
                                                        )
                                   | Bool
GHC.Base.otherwise -> String -> Either String PostPaymentIntentsIntentCaptureResponse
forall a b. a -> Either a b
Data.Either.Left String
"Missing default response type"
                           )
                  Response ByteString
response_0
            )
            Response ByteString
response_0
      )
      (Text
-> Text
-> [QueryParameter]
-> Maybe PostPaymentIntentsIntentCaptureRequestBody
-> RequestBodyEncoding
-> StripeT m (Response ByteString)
forall (m :: * -> *) body.
(MonadHTTP m, ToJSON body) =>
Text
-> Text
-> [QueryParameter]
-> Maybe body
-> RequestBodyEncoding
-> StripeT m (Response ByteString)
StripeAPI.Common.doBodyCallWithConfigurationM (Text -> Text
Data.Text.toUpper (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
GHC.Base.$ String -> Text
Data.Text.pack String
"POST") (String -> Text
Data.Text.pack (String
"/v1/payment_intents/" String -> String -> String
forall a. [a] -> [a] -> [a]
GHC.Base.++ (ByteString -> String
Data.ByteString.Char8.unpack (Bool -> ByteString -> ByteString
Network.HTTP.Types.URI.urlEncode Bool
GHC.Types.True (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
GHC.Base.$ (String -> ByteString
Data.ByteString.Char8.pack (String -> ByteString) -> String -> ByteString
forall a b. (a -> b) -> a -> b
GHC.Base.$ Text -> String
forall a. StringifyModel a => a -> String
StripeAPI.Common.stringifyModel Text
intent)) String -> String -> String
forall a. [a] -> [a] -> [a]
GHC.Base.++ String
"/capture"))) [QueryParameter]
forall a. Monoid a => a
GHC.Base.mempty Maybe PostPaymentIntentsIntentCaptureRequestBody
body RequestBodyEncoding
StripeAPI.Common.RequestBodyEncodingFormData)

-- | Defines the object schema located at @paths.\/v1\/payment_intents\/{intent}\/capture.POST.requestBody.content.application\/x-www-form-urlencoded.schema@ in the specification.
data PostPaymentIntentsIntentCaptureRequestBody = PostPaymentIntentsIntentCaptureRequestBody
  { -- | amount_to_capture: The amount to capture from the PaymentIntent, which must be less than or equal to the original amount. Any additional amount will be automatically refunded. Defaults to the full \`amount_capturable\` if not provided.
    PostPaymentIntentsIntentCaptureRequestBody -> Maybe Int
postPaymentIntentsIntentCaptureRequestBodyAmountToCapture :: (GHC.Maybe.Maybe GHC.Types.Int),
    -- | application_fee_amount: The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner\'s Stripe account. The amount of the application fee collected will be capped at the total payment amount. For more information, see the PaymentIntents [use case for connected accounts](https:\/\/stripe.com\/docs\/payments\/connected-accounts).
    PostPaymentIntentsIntentCaptureRequestBody -> Maybe Int
postPaymentIntentsIntentCaptureRequestBodyApplicationFeeAmount :: (GHC.Maybe.Maybe GHC.Types.Int),
    -- | expand: Specifies which fields in the response should be expanded.
    PostPaymentIntentsIntentCaptureRequestBody -> Maybe [Text]
postPaymentIntentsIntentCaptureRequestBodyExpand :: (GHC.Maybe.Maybe ([Data.Text.Internal.Text])),
    -- | statement_descriptor: For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.
    --
    -- Constraints:
    --
    -- * Maximum length of 22
    PostPaymentIntentsIntentCaptureRequestBody -> Maybe Text
postPaymentIntentsIntentCaptureRequestBodyStatementDescriptor :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | statement_descriptor_suffix: Provides information about a card payment that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 22 characters for the concatenated descriptor.
    --
    -- Constraints:
    --
    -- * Maximum length of 22
    PostPaymentIntentsIntentCaptureRequestBody -> Maybe Text
postPaymentIntentsIntentCaptureRequestBodyStatementDescriptorSuffix :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | transfer_data: The parameters used to automatically create a Transfer when the payment
    -- is captured. For more information, see the PaymentIntents [use case for connected accounts](https:\/\/stripe.com\/docs\/payments\/connected-accounts).
    PostPaymentIntentsIntentCaptureRequestBody
-> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
postPaymentIntentsIntentCaptureRequestBodyTransferData :: (GHC.Maybe.Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData')
  }
  deriving
    ( Int
-> PostPaymentIntentsIntentCaptureRequestBody -> String -> String
[PostPaymentIntentsIntentCaptureRequestBody] -> String -> String
PostPaymentIntentsIntentCaptureRequestBody -> String
(Int
 -> PostPaymentIntentsIntentCaptureRequestBody -> String -> String)
-> (PostPaymentIntentsIntentCaptureRequestBody -> String)
-> ([PostPaymentIntentsIntentCaptureRequestBody]
    -> String -> String)
-> Show PostPaymentIntentsIntentCaptureRequestBody
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [PostPaymentIntentsIntentCaptureRequestBody] -> String -> String
$cshowList :: [PostPaymentIntentsIntentCaptureRequestBody] -> String -> String
show :: PostPaymentIntentsIntentCaptureRequestBody -> String
$cshow :: PostPaymentIntentsIntentCaptureRequestBody -> String
showsPrec :: Int
-> PostPaymentIntentsIntentCaptureRequestBody -> String -> String
$cshowsPrec :: Int
-> PostPaymentIntentsIntentCaptureRequestBody -> String -> String
GHC.Show.Show,
      PostPaymentIntentsIntentCaptureRequestBody
-> PostPaymentIntentsIntentCaptureRequestBody -> Bool
(PostPaymentIntentsIntentCaptureRequestBody
 -> PostPaymentIntentsIntentCaptureRequestBody -> Bool)
-> (PostPaymentIntentsIntentCaptureRequestBody
    -> PostPaymentIntentsIntentCaptureRequestBody -> Bool)
-> Eq PostPaymentIntentsIntentCaptureRequestBody
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostPaymentIntentsIntentCaptureRequestBody
-> PostPaymentIntentsIntentCaptureRequestBody -> Bool
$c/= :: PostPaymentIntentsIntentCaptureRequestBody
-> PostPaymentIntentsIntentCaptureRequestBody -> Bool
== :: PostPaymentIntentsIntentCaptureRequestBody
-> PostPaymentIntentsIntentCaptureRequestBody -> Bool
$c== :: PostPaymentIntentsIntentCaptureRequestBody
-> PostPaymentIntentsIntentCaptureRequestBody -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PostPaymentIntentsIntentCaptureRequestBody where
  toJSON :: PostPaymentIntentsIntentCaptureRequestBody -> Value
toJSON PostPaymentIntentsIntentCaptureRequestBody
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"amount_to_capture" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody -> Maybe Int
postPaymentIntentsIntentCaptureRequestBodyAmountToCapture PostPaymentIntentsIntentCaptureRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"application_fee_amount" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody -> Maybe Int
postPaymentIntentsIntentCaptureRequestBodyApplicationFeeAmount PostPaymentIntentsIntentCaptureRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"expand" Text -> Maybe [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody -> Maybe [Text]
postPaymentIntentsIntentCaptureRequestBodyExpand PostPaymentIntentsIntentCaptureRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"statement_descriptor" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody -> Maybe Text
postPaymentIntentsIntentCaptureRequestBodyStatementDescriptor PostPaymentIntentsIntentCaptureRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"statement_descriptor_suffix" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody -> Maybe Text
postPaymentIntentsIntentCaptureRequestBodyStatementDescriptorSuffix PostPaymentIntentsIntentCaptureRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"transfer_data" Text
-> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody
-> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
postPaymentIntentsIntentCaptureRequestBodyTransferData PostPaymentIntentsIntentCaptureRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PostPaymentIntentsIntentCaptureRequestBody -> Encoding
toEncoding PostPaymentIntentsIntentCaptureRequestBody
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"amount_to_capture" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody -> Maybe Int
postPaymentIntentsIntentCaptureRequestBodyAmountToCapture PostPaymentIntentsIntentCaptureRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"application_fee_amount" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody -> Maybe Int
postPaymentIntentsIntentCaptureRequestBodyApplicationFeeAmount PostPaymentIntentsIntentCaptureRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"expand" Text -> Maybe [Text] -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody -> Maybe [Text]
postPaymentIntentsIntentCaptureRequestBodyExpand PostPaymentIntentsIntentCaptureRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"statement_descriptor" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody -> Maybe Text
postPaymentIntentsIntentCaptureRequestBodyStatementDescriptor PostPaymentIntentsIntentCaptureRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"statement_descriptor_suffix" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody -> Maybe Text
postPaymentIntentsIntentCaptureRequestBodyStatementDescriptorSuffix PostPaymentIntentsIntentCaptureRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"transfer_data" Text
-> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBody
-> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
postPaymentIntentsIntentCaptureRequestBodyTransferData PostPaymentIntentsIntentCaptureRequestBody
obj))))))

instance Data.Aeson.Types.FromJSON.FromJSON PostPaymentIntentsIntentCaptureRequestBody where
  parseJSON :: Value -> Parser PostPaymentIntentsIntentCaptureRequestBody
parseJSON = String
-> (Object -> Parser PostPaymentIntentsIntentCaptureRequestBody)
-> Value
-> Parser PostPaymentIntentsIntentCaptureRequestBody
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PostPaymentIntentsIntentCaptureRequestBody" (\Object
obj -> ((((((Maybe Int
 -> Maybe Int
 -> Maybe [Text]
 -> Maybe Text
 -> Maybe Text
 -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
 -> PostPaymentIntentsIntentCaptureRequestBody)
-> Parser
     (Maybe Int
      -> Maybe Int
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
      -> PostPaymentIntentsIntentCaptureRequestBody)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Int
-> Maybe Int
-> Maybe [Text]
-> Maybe Text
-> Maybe Text
-> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> PostPaymentIntentsIntentCaptureRequestBody
PostPaymentIntentsIntentCaptureRequestBody Parser
  (Maybe Int
   -> Maybe Int
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
   -> PostPaymentIntentsIntentCaptureRequestBody)
-> Parser (Maybe Int)
-> Parser
     (Maybe Int
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
      -> PostPaymentIntentsIntentCaptureRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"amount_to_capture")) Parser
  (Maybe Int
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
   -> PostPaymentIntentsIntentCaptureRequestBody)
-> Parser (Maybe Int)
-> Parser
     (Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
      -> PostPaymentIntentsIntentCaptureRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"application_fee_amount")) Parser
  (Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
   -> PostPaymentIntentsIntentCaptureRequestBody)
-> Parser (Maybe [Text])
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
      -> PostPaymentIntentsIntentCaptureRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe [Text])
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"expand")) Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
   -> PostPaymentIntentsIntentCaptureRequestBody)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
      -> PostPaymentIntentsIntentCaptureRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"statement_descriptor")) Parser
  (Maybe Text
   -> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
   -> PostPaymentIntentsIntentCaptureRequestBody)
-> Parser (Maybe Text)
-> Parser
     (Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
      -> PostPaymentIntentsIntentCaptureRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"statement_descriptor_suffix")) Parser
  (Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
   -> PostPaymentIntentsIntentCaptureRequestBody)
-> Parser
     (Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData')
-> Parser PostPaymentIntentsIntentCaptureRequestBody
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"transfer_data"))

-- | Create a new 'PostPaymentIntentsIntentCaptureRequestBody' with all required fields.
mkPostPaymentIntentsIntentCaptureRequestBody :: PostPaymentIntentsIntentCaptureRequestBody
mkPostPaymentIntentsIntentCaptureRequestBody :: PostPaymentIntentsIntentCaptureRequestBody
mkPostPaymentIntentsIntentCaptureRequestBody =
  PostPaymentIntentsIntentCaptureRequestBody :: Maybe Int
-> Maybe Int
-> Maybe [Text]
-> Maybe Text
-> Maybe Text
-> Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> PostPaymentIntentsIntentCaptureRequestBody
PostPaymentIntentsIntentCaptureRequestBody
    { postPaymentIntentsIntentCaptureRequestBodyAmountToCapture :: Maybe Int
postPaymentIntentsIntentCaptureRequestBodyAmountToCapture = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing,
      postPaymentIntentsIntentCaptureRequestBodyApplicationFeeAmount :: Maybe Int
postPaymentIntentsIntentCaptureRequestBodyApplicationFeeAmount = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing,
      postPaymentIntentsIntentCaptureRequestBodyExpand :: Maybe [Text]
postPaymentIntentsIntentCaptureRequestBodyExpand = Maybe [Text]
forall a. Maybe a
GHC.Maybe.Nothing,
      postPaymentIntentsIntentCaptureRequestBodyStatementDescriptor :: Maybe Text
postPaymentIntentsIntentCaptureRequestBodyStatementDescriptor = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      postPaymentIntentsIntentCaptureRequestBodyStatementDescriptorSuffix :: Maybe Text
postPaymentIntentsIntentCaptureRequestBodyStatementDescriptorSuffix = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      postPaymentIntentsIntentCaptureRequestBodyTransferData :: Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
postPaymentIntentsIntentCaptureRequestBodyTransferData = Maybe PostPaymentIntentsIntentCaptureRequestBodyTransferData'
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the object schema located at @paths.\/v1\/payment_intents\/{intent}\/capture.POST.requestBody.content.application\/x-www-form-urlencoded.schema.properties.transfer_data@ in the specification.
--
-- The parameters used to automatically create a Transfer when the payment
-- is captured. For more information, see the PaymentIntents [use case for connected accounts](https:\/\/stripe.com\/docs\/payments\/connected-accounts).
data PostPaymentIntentsIntentCaptureRequestBodyTransferData' = PostPaymentIntentsIntentCaptureRequestBodyTransferData'
  { -- | amount
    PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> Maybe Int
postPaymentIntentsIntentCaptureRequestBodyTransferData'Amount :: (GHC.Maybe.Maybe GHC.Types.Int)
  }
  deriving
    ( Int
-> PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> String
-> String
[PostPaymentIntentsIntentCaptureRequestBodyTransferData']
-> String -> String
PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> String
(Int
 -> PostPaymentIntentsIntentCaptureRequestBodyTransferData'
 -> String
 -> String)
-> (PostPaymentIntentsIntentCaptureRequestBodyTransferData'
    -> String)
-> ([PostPaymentIntentsIntentCaptureRequestBodyTransferData']
    -> String -> String)
-> Show PostPaymentIntentsIntentCaptureRequestBodyTransferData'
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [PostPaymentIntentsIntentCaptureRequestBodyTransferData']
-> String -> String
$cshowList :: [PostPaymentIntentsIntentCaptureRequestBodyTransferData']
-> String -> String
show :: PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> String
$cshow :: PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> String
showsPrec :: Int
-> PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> String
-> String
$cshowsPrec :: Int
-> PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> String
-> String
GHC.Show.Show,
      PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> Bool
(PostPaymentIntentsIntentCaptureRequestBodyTransferData'
 -> PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> Bool)
-> (PostPaymentIntentsIntentCaptureRequestBodyTransferData'
    -> PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> Bool)
-> Eq PostPaymentIntentsIntentCaptureRequestBodyTransferData'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> Bool
$c/= :: PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> Bool
== :: PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> Bool
$c== :: PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PostPaymentIntentsIntentCaptureRequestBodyTransferData' where
  toJSON :: PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> Value
toJSON PostPaymentIntentsIntentCaptureRequestBodyTransferData'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"amount" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> Maybe Int
postPaymentIntentsIntentCaptureRequestBodyTransferData'Amount PostPaymentIntentsIntentCaptureRequestBodyTransferData'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PostPaymentIntentsIntentCaptureRequestBodyTransferData' -> Encoding
toEncoding PostPaymentIntentsIntentCaptureRequestBodyTransferData'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs (Text
"amount" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostPaymentIntentsIntentCaptureRequestBodyTransferData'
-> Maybe Int
postPaymentIntentsIntentCaptureRequestBodyTransferData'Amount PostPaymentIntentsIntentCaptureRequestBodyTransferData'
obj)

instance Data.Aeson.Types.FromJSON.FromJSON PostPaymentIntentsIntentCaptureRequestBodyTransferData' where
  parseJSON :: Value
-> Parser PostPaymentIntentsIntentCaptureRequestBodyTransferData'
parseJSON = String
-> (Object
    -> Parser PostPaymentIntentsIntentCaptureRequestBodyTransferData')
-> Value
-> Parser PostPaymentIntentsIntentCaptureRequestBodyTransferData'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PostPaymentIntentsIntentCaptureRequestBodyTransferData'" (\Object
obj -> (Maybe Int
 -> PostPaymentIntentsIntentCaptureRequestBodyTransferData')
-> Parser
     (Maybe Int
      -> PostPaymentIntentsIntentCaptureRequestBodyTransferData')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Int
-> PostPaymentIntentsIntentCaptureRequestBodyTransferData'
PostPaymentIntentsIntentCaptureRequestBodyTransferData' Parser
  (Maybe Int
   -> PostPaymentIntentsIntentCaptureRequestBodyTransferData')
-> Parser (Maybe Int)
-> Parser PostPaymentIntentsIntentCaptureRequestBodyTransferData'
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"amount"))

-- | Create a new 'PostPaymentIntentsIntentCaptureRequestBodyTransferData'' with all required fields.
mkPostPaymentIntentsIntentCaptureRequestBodyTransferData' :: PostPaymentIntentsIntentCaptureRequestBodyTransferData'
mkPostPaymentIntentsIntentCaptureRequestBodyTransferData' :: PostPaymentIntentsIntentCaptureRequestBodyTransferData'
mkPostPaymentIntentsIntentCaptureRequestBodyTransferData' = PostPaymentIntentsIntentCaptureRequestBodyTransferData' :: Maybe Int
-> PostPaymentIntentsIntentCaptureRequestBodyTransferData'
PostPaymentIntentsIntentCaptureRequestBodyTransferData' {postPaymentIntentsIntentCaptureRequestBodyTransferData'Amount :: Maybe Int
postPaymentIntentsIntentCaptureRequestBodyTransferData'Amount = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing}

-- | Represents a response of the operation 'postPaymentIntentsIntentCapture'.
--
-- The response constructor is chosen by the status code of the response. If no case matches (no specific case for the response code, no range case, no default case), 'PostPaymentIntentsIntentCaptureResponseError' is used.
data PostPaymentIntentsIntentCaptureResponse
  = -- | Means either no matching case available or a parse error
    PostPaymentIntentsIntentCaptureResponseError GHC.Base.String
  | -- | Successful response.
    PostPaymentIntentsIntentCaptureResponse200 PaymentIntent
  | -- | Error response.
    PostPaymentIntentsIntentCaptureResponseDefault Error
  deriving (Int -> PostPaymentIntentsIntentCaptureResponse -> String -> String
[PostPaymentIntentsIntentCaptureResponse] -> String -> String
PostPaymentIntentsIntentCaptureResponse -> String
(Int
 -> PostPaymentIntentsIntentCaptureResponse -> String -> String)
-> (PostPaymentIntentsIntentCaptureResponse -> String)
-> ([PostPaymentIntentsIntentCaptureResponse] -> String -> String)
-> Show PostPaymentIntentsIntentCaptureResponse
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [PostPaymentIntentsIntentCaptureResponse] -> String -> String
$cshowList :: [PostPaymentIntentsIntentCaptureResponse] -> String -> String
show :: PostPaymentIntentsIntentCaptureResponse -> String
$cshow :: PostPaymentIntentsIntentCaptureResponse -> String
showsPrec :: Int -> PostPaymentIntentsIntentCaptureResponse -> String -> String
$cshowsPrec :: Int -> PostPaymentIntentsIntentCaptureResponse -> String -> String
GHC.Show.Show, PostPaymentIntentsIntentCaptureResponse
-> PostPaymentIntentsIntentCaptureResponse -> Bool
(PostPaymentIntentsIntentCaptureResponse
 -> PostPaymentIntentsIntentCaptureResponse -> Bool)
-> (PostPaymentIntentsIntentCaptureResponse
    -> PostPaymentIntentsIntentCaptureResponse -> Bool)
-> Eq PostPaymentIntentsIntentCaptureResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostPaymentIntentsIntentCaptureResponse
-> PostPaymentIntentsIntentCaptureResponse -> Bool
$c/= :: PostPaymentIntentsIntentCaptureResponse
-> PostPaymentIntentsIntentCaptureResponse -> Bool
== :: PostPaymentIntentsIntentCaptureResponse
-> PostPaymentIntentsIntentCaptureResponse -> Bool
$c== :: PostPaymentIntentsIntentCaptureResponse
-> PostPaymentIntentsIntentCaptureResponse -> Bool
GHC.Classes.Eq)