{-# 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 types generated from the schema Refund
module StripeAPI.Types.Refund where

import qualified Control.Monad.Fail
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.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 GHC.Base
import qualified GHC.Classes
import qualified GHC.Int
import qualified GHC.Show
import qualified GHC.Types
import qualified StripeAPI.Common
import StripeAPI.TypeAlias
import {-# SOURCE #-} StripeAPI.Types.BalanceTransaction
import {-# SOURCE #-} StripeAPI.Types.Charge
import {-# SOURCE #-} StripeAPI.Types.PaymentIntent
import {-# SOURCE #-} StripeAPI.Types.TransferReversal
import qualified Prelude as GHC.Integer.Type
import qualified Prelude as GHC.Maybe

-- | Defines the object schema located at @components.schemas.refund@ in the specification.
--
-- \`Refund\` objects allow you to refund a charge that has previously been created
-- but not yet refunded. Funds will be refunded to the credit or debit card that
-- was originally charged.
--
-- Related guide: [Refunds](https:\/\/stripe.com\/docs\/refunds).
data Refund = Refund
  { -- | amount: Amount, in %s.
    Refund -> Int
refundAmount :: GHC.Types.Int,
    -- | balance_transaction: Balance transaction that describes the impact on your account balance.
    Refund -> Maybe RefundBalanceTransaction'Variants
refundBalanceTransaction :: (GHC.Maybe.Maybe RefundBalanceTransaction'Variants),
    -- | charge: ID of the charge that was refunded.
    Refund -> Maybe RefundCharge'Variants
refundCharge :: (GHC.Maybe.Maybe RefundCharge'Variants),
    -- | created: Time at which the object was created. Measured in seconds since the Unix epoch.
    Refund -> Int
refundCreated :: GHC.Types.Int,
    -- | currency: Three-letter [ISO currency code](https:\/\/www.iso.org\/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https:\/\/stripe.com\/docs\/currencies).
    Refund -> Text
refundCurrency :: Data.Text.Internal.Text,
    -- | description: An arbitrary string attached to the object. Often useful for displaying to users. (Available on non-card refunds only)
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Refund -> Maybe Text
refundDescription :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | failure_balance_transaction: If the refund failed, this balance transaction describes the adjustment made on your account balance that reverses the initial balance transaction.
    Refund -> Maybe RefundFailureBalanceTransaction'Variants
refundFailureBalanceTransaction :: (GHC.Maybe.Maybe RefundFailureBalanceTransaction'Variants),
    -- | failure_reason: If the refund failed, the reason for refund failure if known. Possible values are \`lost_or_stolen_card\`, \`expired_or_canceled_card\`, or \`unknown\`.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Refund -> Maybe Text
refundFailureReason :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | id: Unique identifier for the object.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Refund -> Text
refundId :: Data.Text.Internal.Text,
    -- | metadata: Set of [key-value pairs](https:\/\/stripe.com\/docs\/api\/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
    Refund -> Maybe Object
refundMetadata :: (GHC.Maybe.Maybe Data.Aeson.Types.Internal.Object),
    -- | payment_intent: ID of the PaymentIntent that was refunded.
    Refund -> Maybe RefundPaymentIntent'Variants
refundPaymentIntent :: (GHC.Maybe.Maybe RefundPaymentIntent'Variants),
    -- | reason: Reason for the refund, either user-provided (\`duplicate\`, \`fraudulent\`, or \`requested_by_customer\`) or generated by Stripe internally (\`expired_uncaptured_charge\`).
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Refund -> Maybe Text
refundReason :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | receipt_number: This is the transaction number that appears on email receipts sent for this refund.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Refund -> Maybe Text
refundReceiptNumber :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | source_transfer_reversal: The transfer reversal that is associated with the refund. Only present if the charge came from another Stripe account. See the Connect documentation for details.
    Refund -> Maybe RefundSourceTransferReversal'Variants
refundSourceTransferReversal :: (GHC.Maybe.Maybe RefundSourceTransferReversal'Variants),
    -- | status: Status of the refund. For credit card refunds, this can be \`pending\`, \`succeeded\`, or \`failed\`. For other types of refunds, it can be \`pending\`, \`succeeded\`, \`failed\`, or \`canceled\`. Refer to our [refunds](https:\/\/stripe.com\/docs\/refunds\#failed-refunds) documentation for more details.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Refund -> Maybe Text
refundStatus :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | transfer_reversal: If the accompanying transfer was reversed, the transfer reversal object. Only applicable if the charge was created using the destination parameter.
    Refund -> Maybe RefundTransferReversal'Variants
refundTransferReversal :: (GHC.Maybe.Maybe RefundTransferReversal'Variants)
  }
  deriving
    ( Int -> Refund -> ShowS
[Refund] -> ShowS
Refund -> String
(Int -> Refund -> ShowS)
-> (Refund -> String) -> ([Refund] -> ShowS) -> Show Refund
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Refund] -> ShowS
$cshowList :: [Refund] -> ShowS
show :: Refund -> String
$cshow :: Refund -> String
showsPrec :: Int -> Refund -> ShowS
$cshowsPrec :: Int -> Refund -> ShowS
GHC.Show.Show,
      Refund -> Refund -> Bool
(Refund -> Refund -> Bool)
-> (Refund -> Refund -> Bool) -> Eq Refund
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Refund -> Refund -> Bool
$c/= :: Refund -> Refund -> Bool
== :: Refund -> Refund -> Bool
$c== :: Refund -> Refund -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON Refund where
  toJSON :: Refund -> Value
toJSON Refund
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"amount" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Int
refundAmount Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"balance_transaction" Text -> Maybe RefundBalanceTransaction'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundBalanceTransaction'Variants
refundBalanceTransaction Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"charge" Text -> Maybe RefundCharge'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundCharge'Variants
refundCharge Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"created" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Int
refundCreated Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"currency" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Text
refundCurrency Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"description" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Text
refundDescription Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"failure_balance_transaction" Text -> Maybe RefundFailureBalanceTransaction'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundFailureBalanceTransaction'Variants
refundFailureBalanceTransaction Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"failure_reason" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Text
refundFailureReason Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"id" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Text
refundId Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"metadata" Text -> Maybe Object -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Object
refundMetadata Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"payment_intent" Text -> Maybe RefundPaymentIntent'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundPaymentIntent'Variants
refundPaymentIntent Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"reason" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Text
refundReason Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"receipt_number" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Text
refundReceiptNumber Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"source_transfer_reversal" Text -> Maybe RefundSourceTransferReversal'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundSourceTransferReversal'Variants
refundSourceTransferReversal Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"status" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Text
refundStatus Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"transfer_reversal" Text -> Maybe RefundTransferReversal'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundTransferReversal'Variants
refundTransferReversal Refund
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"object" Text -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Text -> Value
Data.Aeson.Types.Internal.String Text
"refund" Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: Refund -> Encoding
toEncoding Refund
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"amount" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Int
refundAmount Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"balance_transaction" Text -> Maybe RefundBalanceTransaction'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundBalanceTransaction'Variants
refundBalanceTransaction Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"charge" Text -> Maybe RefundCharge'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundCharge'Variants
refundCharge Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"created" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Int
refundCreated Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"currency" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Text
refundCurrency Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"description" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Text
refundDescription Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"failure_balance_transaction" Text -> Maybe RefundFailureBalanceTransaction'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundFailureBalanceTransaction'Variants
refundFailureBalanceTransaction Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"failure_reason" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Text
refundFailureReason Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"id" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Text
refundId Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"metadata" Text -> Maybe Object -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Object
refundMetadata Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"payment_intent" Text -> Maybe RefundPaymentIntent'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundPaymentIntent'Variants
refundPaymentIntent Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"reason" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Text
refundReason Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"receipt_number" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Text
refundReceiptNumber Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"source_transfer_reversal" Text -> Maybe RefundSourceTransferReversal'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundSourceTransferReversal'Variants
refundSourceTransferReversal Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"status" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe Text
refundStatus Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"transfer_reversal" Text -> Maybe RefundTransferReversal'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Refund -> Maybe RefundTransferReversal'Variants
refundTransferReversal Refund
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"object" Text -> Value -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Text -> Value
Data.Aeson.Types.Internal.String Text
"refund")))))))))))))))))

instance Data.Aeson.Types.FromJSON.FromJSON Refund where
  parseJSON :: Value -> Parser Refund
parseJSON = String -> (Object -> Parser Refund) -> Value -> Parser Refund
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"Refund" (\Object
obj -> ((((((((((((((((Int
 -> Maybe RefundBalanceTransaction'Variants
 -> Maybe RefundCharge'Variants
 -> Int
 -> Text
 -> Maybe Text
 -> Maybe RefundFailureBalanceTransaction'Variants
 -> Maybe Text
 -> Text
 -> Maybe Object
 -> Maybe RefundPaymentIntent'Variants
 -> Maybe Text
 -> Maybe Text
 -> Maybe RefundSourceTransferReversal'Variants
 -> Maybe Text
 -> Maybe RefundTransferReversal'Variants
 -> Refund)
-> Parser
     (Int
      -> Maybe RefundBalanceTransaction'Variants
      -> Maybe RefundCharge'Variants
      -> Int
      -> Text
      -> Maybe Text
      -> Maybe RefundFailureBalanceTransaction'Variants
      -> Maybe Text
      -> Text
      -> Maybe Object
      -> Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Int
-> Maybe RefundBalanceTransaction'Variants
-> Maybe RefundCharge'Variants
-> Int
-> Text
-> Maybe Text
-> Maybe RefundFailureBalanceTransaction'Variants
-> Maybe Text
-> Text
-> Maybe Object
-> Maybe RefundPaymentIntent'Variants
-> Maybe Text
-> Maybe Text
-> Maybe RefundSourceTransferReversal'Variants
-> Maybe Text
-> Maybe RefundTransferReversal'Variants
-> Refund
Refund Parser
  (Int
   -> Maybe RefundBalanceTransaction'Variants
   -> Maybe RefundCharge'Variants
   -> Int
   -> Text
   -> Maybe Text
   -> Maybe RefundFailureBalanceTransaction'Variants
   -> Maybe Text
   -> Text
   -> Maybe Object
   -> Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser Int
-> Parser
     (Maybe RefundBalanceTransaction'Variants
      -> Maybe RefundCharge'Variants
      -> Int
      -> Text
      -> Maybe Text
      -> Maybe RefundFailureBalanceTransaction'Variants
      -> Maybe Text
      -> Text
      -> Maybe Object
      -> Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Int
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"amount")) Parser
  (Maybe RefundBalanceTransaction'Variants
   -> Maybe RefundCharge'Variants
   -> Int
   -> Text
   -> Maybe Text
   -> Maybe RefundFailureBalanceTransaction'Variants
   -> Maybe Text
   -> Text
   -> Maybe Object
   -> Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser (Maybe RefundBalanceTransaction'Variants)
-> Parser
     (Maybe RefundCharge'Variants
      -> Int
      -> Text
      -> Maybe Text
      -> Maybe RefundFailureBalanceTransaction'Variants
      -> Maybe Text
      -> Text
      -> Maybe Object
      -> Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe RefundBalanceTransaction'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"balance_transaction")) Parser
  (Maybe RefundCharge'Variants
   -> Int
   -> Text
   -> Maybe Text
   -> Maybe RefundFailureBalanceTransaction'Variants
   -> Maybe Text
   -> Text
   -> Maybe Object
   -> Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser (Maybe RefundCharge'Variants)
-> Parser
     (Int
      -> Text
      -> Maybe Text
      -> Maybe RefundFailureBalanceTransaction'Variants
      -> Maybe Text
      -> Text
      -> Maybe Object
      -> Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe RefundCharge'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"charge")) Parser
  (Int
   -> Text
   -> Maybe Text
   -> Maybe RefundFailureBalanceTransaction'Variants
   -> Maybe Text
   -> Text
   -> Maybe Object
   -> Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser Int
-> Parser
     (Text
      -> Maybe Text
      -> Maybe RefundFailureBalanceTransaction'Variants
      -> Maybe Text
      -> Text
      -> Maybe Object
      -> Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Int
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"created")) Parser
  (Text
   -> Maybe Text
   -> Maybe RefundFailureBalanceTransaction'Variants
   -> Maybe Text
   -> Text
   -> Maybe Object
   -> Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser Text
-> Parser
     (Maybe Text
      -> Maybe RefundFailureBalanceTransaction'Variants
      -> Maybe Text
      -> Text
      -> Maybe Object
      -> Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"currency")) Parser
  (Maybe Text
   -> Maybe RefundFailureBalanceTransaction'Variants
   -> Maybe Text
   -> Text
   -> Maybe Object
   -> Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser (Maybe Text)
-> Parser
     (Maybe RefundFailureBalanceTransaction'Variants
      -> Maybe Text
      -> Text
      -> Maybe Object
      -> Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
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
"description")) Parser
  (Maybe RefundFailureBalanceTransaction'Variants
   -> Maybe Text
   -> Text
   -> Maybe Object
   -> Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser (Maybe RefundFailureBalanceTransaction'Variants)
-> Parser
     (Maybe Text
      -> Text
      -> Maybe Object
      -> Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text -> Parser (Maybe RefundFailureBalanceTransaction'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"failure_balance_transaction")) Parser
  (Maybe Text
   -> Text
   -> Maybe Object
   -> Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser (Maybe Text)
-> Parser
     (Text
      -> Maybe Object
      -> Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
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
"failure_reason")) Parser
  (Text
   -> Maybe Object
   -> Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser Text
-> Parser
     (Maybe Object
      -> Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"id")) Parser
  (Maybe Object
   -> Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser (Maybe Object)
-> Parser
     (Maybe RefundPaymentIntent'Variants
      -> Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Object)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"metadata")) Parser
  (Maybe RefundPaymentIntent'Variants
   -> Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser (Maybe RefundPaymentIntent'Variants)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe RefundPaymentIntent'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"payment_intent")) Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text
      -> Maybe RefundTransferReversal'Variants
      -> Refund)
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
"reason")) Parser
  (Maybe Text
   -> Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text
   -> Maybe RefundTransferReversal'Variants
   -> Refund)
-> Parser (Maybe Text)
-> Parser
     (Maybe RefundSourceTransferReversal'Variants
      -> Maybe Text -> Maybe RefundTransferReversal'Variants -> Refund)
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
"receipt_number")) Parser
  (Maybe RefundSourceTransferReversal'Variants
   -> Maybe Text -> Maybe RefundTransferReversal'Variants -> Refund)
-> Parser (Maybe RefundSourceTransferReversal'Variants)
-> Parser
     (Maybe Text -> Maybe RefundTransferReversal'Variants -> Refund)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text -> Parser (Maybe RefundSourceTransferReversal'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"source_transfer_reversal")) Parser
  (Maybe Text -> Maybe RefundTransferReversal'Variants -> Refund)
-> Parser (Maybe Text)
-> Parser (Maybe RefundTransferReversal'Variants -> Refund)
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
"status")) Parser (Maybe RefundTransferReversal'Variants -> Refund)
-> Parser (Maybe RefundTransferReversal'Variants) -> Parser Refund
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe RefundTransferReversal'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"transfer_reversal"))

-- | Create a new 'Refund' with all required fields.
mkRefund ::
  -- | 'refundAmount'
  GHC.Types.Int ->
  -- | 'refundCreated'
  GHC.Types.Int ->
  -- | 'refundCurrency'
  Data.Text.Internal.Text ->
  -- | 'refundId'
  Data.Text.Internal.Text ->
  Refund
mkRefund :: Int -> Int -> Text -> Text -> Refund
mkRefund Int
refundAmount Int
refundCreated Text
refundCurrency Text
refundId =
  Refund :: Int
-> Maybe RefundBalanceTransaction'Variants
-> Maybe RefundCharge'Variants
-> Int
-> Text
-> Maybe Text
-> Maybe RefundFailureBalanceTransaction'Variants
-> Maybe Text
-> Text
-> Maybe Object
-> Maybe RefundPaymentIntent'Variants
-> Maybe Text
-> Maybe Text
-> Maybe RefundSourceTransferReversal'Variants
-> Maybe Text
-> Maybe RefundTransferReversal'Variants
-> Refund
Refund
    { refundAmount :: Int
refundAmount = Int
refundAmount,
      refundBalanceTransaction :: Maybe RefundBalanceTransaction'Variants
refundBalanceTransaction = Maybe RefundBalanceTransaction'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      refundCharge :: Maybe RefundCharge'Variants
refundCharge = Maybe RefundCharge'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      refundCreated :: Int
refundCreated = Int
refundCreated,
      refundCurrency :: Text
refundCurrency = Text
refundCurrency,
      refundDescription :: Maybe Text
refundDescription = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      refundFailureBalanceTransaction :: Maybe RefundFailureBalanceTransaction'Variants
refundFailureBalanceTransaction = Maybe RefundFailureBalanceTransaction'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      refundFailureReason :: Maybe Text
refundFailureReason = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      refundId :: Text
refundId = Text
refundId,
      refundMetadata :: Maybe Object
refundMetadata = Maybe Object
forall a. Maybe a
GHC.Maybe.Nothing,
      refundPaymentIntent :: Maybe RefundPaymentIntent'Variants
refundPaymentIntent = Maybe RefundPaymentIntent'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      refundReason :: Maybe Text
refundReason = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      refundReceiptNumber :: Maybe Text
refundReceiptNumber = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      refundSourceTransferReversal :: Maybe RefundSourceTransferReversal'Variants
refundSourceTransferReversal = Maybe RefundSourceTransferReversal'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      refundStatus :: Maybe Text
refundStatus = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      refundTransferReversal :: Maybe RefundTransferReversal'Variants
refundTransferReversal = Maybe RefundTransferReversal'Variants
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the oneOf schema located at @components.schemas.refund.properties.balance_transaction.anyOf@ in the specification.
--
-- Balance transaction that describes the impact on your account balance.
data RefundBalanceTransaction'Variants
  = RefundBalanceTransaction'Text Data.Text.Internal.Text
  | RefundBalanceTransaction'BalanceTransaction BalanceTransaction
  deriving (Int -> RefundBalanceTransaction'Variants -> ShowS
[RefundBalanceTransaction'Variants] -> ShowS
RefundBalanceTransaction'Variants -> String
(Int -> RefundBalanceTransaction'Variants -> ShowS)
-> (RefundBalanceTransaction'Variants -> String)
-> ([RefundBalanceTransaction'Variants] -> ShowS)
-> Show RefundBalanceTransaction'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RefundBalanceTransaction'Variants] -> ShowS
$cshowList :: [RefundBalanceTransaction'Variants] -> ShowS
show :: RefundBalanceTransaction'Variants -> String
$cshow :: RefundBalanceTransaction'Variants -> String
showsPrec :: Int -> RefundBalanceTransaction'Variants -> ShowS
$cshowsPrec :: Int -> RefundBalanceTransaction'Variants -> ShowS
GHC.Show.Show, RefundBalanceTransaction'Variants
-> RefundBalanceTransaction'Variants -> Bool
(RefundBalanceTransaction'Variants
 -> RefundBalanceTransaction'Variants -> Bool)
-> (RefundBalanceTransaction'Variants
    -> RefundBalanceTransaction'Variants -> Bool)
-> Eq RefundBalanceTransaction'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RefundBalanceTransaction'Variants
-> RefundBalanceTransaction'Variants -> Bool
$c/= :: RefundBalanceTransaction'Variants
-> RefundBalanceTransaction'Variants -> Bool
== :: RefundBalanceTransaction'Variants
-> RefundBalanceTransaction'Variants -> Bool
$c== :: RefundBalanceTransaction'Variants
-> RefundBalanceTransaction'Variants -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON RefundBalanceTransaction'Variants where
  toJSON :: RefundBalanceTransaction'Variants -> Value
toJSON (RefundBalanceTransaction'Text Text
a) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
a
  toJSON (RefundBalanceTransaction'BalanceTransaction BalanceTransaction
a) = BalanceTransaction -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON BalanceTransaction
a

instance Data.Aeson.Types.FromJSON.FromJSON RefundBalanceTransaction'Variants where
  parseJSON :: Value -> Parser RefundBalanceTransaction'Variants
parseJSON Value
val = case (Text -> RefundBalanceTransaction'Variants
RefundBalanceTransaction'Text (Text -> RefundBalanceTransaction'Variants)
-> Result Text -> Result RefundBalanceTransaction'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result Text
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundBalanceTransaction'Variants
-> Result RefundBalanceTransaction'Variants
-> Result RefundBalanceTransaction'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> ((BalanceTransaction -> RefundBalanceTransaction'Variants
RefundBalanceTransaction'BalanceTransaction (BalanceTransaction -> RefundBalanceTransaction'Variants)
-> Result BalanceTransaction
-> Result RefundBalanceTransaction'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result BalanceTransaction
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundBalanceTransaction'Variants
-> Result RefundBalanceTransaction'Variants
-> Result RefundBalanceTransaction'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String -> Result RefundBalanceTransaction'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched") of
    Data.Aeson.Types.Internal.Success RefundBalanceTransaction'Variants
a -> RefundBalanceTransaction'Variants
-> Parser RefundBalanceTransaction'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure RefundBalanceTransaction'Variants
a
    Data.Aeson.Types.Internal.Error String
a -> String -> Parser RefundBalanceTransaction'Variants
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
a

-- | Defines the oneOf schema located at @components.schemas.refund.properties.charge.anyOf@ in the specification.
--
-- ID of the charge that was refunded.
data RefundCharge'Variants
  = RefundCharge'Text Data.Text.Internal.Text
  | RefundCharge'Charge Charge
  deriving (Int -> RefundCharge'Variants -> ShowS
[RefundCharge'Variants] -> ShowS
RefundCharge'Variants -> String
(Int -> RefundCharge'Variants -> ShowS)
-> (RefundCharge'Variants -> String)
-> ([RefundCharge'Variants] -> ShowS)
-> Show RefundCharge'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RefundCharge'Variants] -> ShowS
$cshowList :: [RefundCharge'Variants] -> ShowS
show :: RefundCharge'Variants -> String
$cshow :: RefundCharge'Variants -> String
showsPrec :: Int -> RefundCharge'Variants -> ShowS
$cshowsPrec :: Int -> RefundCharge'Variants -> ShowS
GHC.Show.Show, RefundCharge'Variants -> RefundCharge'Variants -> Bool
(RefundCharge'Variants -> RefundCharge'Variants -> Bool)
-> (RefundCharge'Variants -> RefundCharge'Variants -> Bool)
-> Eq RefundCharge'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RefundCharge'Variants -> RefundCharge'Variants -> Bool
$c/= :: RefundCharge'Variants -> RefundCharge'Variants -> Bool
== :: RefundCharge'Variants -> RefundCharge'Variants -> Bool
$c== :: RefundCharge'Variants -> RefundCharge'Variants -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON RefundCharge'Variants where
  toJSON :: RefundCharge'Variants -> Value
toJSON (RefundCharge'Text Text
a) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
a
  toJSON (RefundCharge'Charge Charge
a) = Charge -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Charge
a

instance Data.Aeson.Types.FromJSON.FromJSON RefundCharge'Variants where
  parseJSON :: Value -> Parser RefundCharge'Variants
parseJSON Value
val = case (Text -> RefundCharge'Variants
RefundCharge'Text (Text -> RefundCharge'Variants)
-> Result Text -> Result RefundCharge'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result Text
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundCharge'Variants
-> Result RefundCharge'Variants -> Result RefundCharge'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> ((Charge -> RefundCharge'Variants
RefundCharge'Charge (Charge -> RefundCharge'Variants)
-> Result Charge -> Result RefundCharge'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result Charge
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundCharge'Variants
-> Result RefundCharge'Variants -> Result RefundCharge'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String -> Result RefundCharge'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched") of
    Data.Aeson.Types.Internal.Success RefundCharge'Variants
a -> RefundCharge'Variants -> Parser RefundCharge'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure RefundCharge'Variants
a
    Data.Aeson.Types.Internal.Error String
a -> String -> Parser RefundCharge'Variants
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
a

-- | Defines the oneOf schema located at @components.schemas.refund.properties.failure_balance_transaction.anyOf@ in the specification.
--
-- If the refund failed, this balance transaction describes the adjustment made on your account balance that reverses the initial balance transaction.
data RefundFailureBalanceTransaction'Variants
  = RefundFailureBalanceTransaction'Text Data.Text.Internal.Text
  | RefundFailureBalanceTransaction'BalanceTransaction BalanceTransaction
  deriving (Int -> RefundFailureBalanceTransaction'Variants -> ShowS
[RefundFailureBalanceTransaction'Variants] -> ShowS
RefundFailureBalanceTransaction'Variants -> String
(Int -> RefundFailureBalanceTransaction'Variants -> ShowS)
-> (RefundFailureBalanceTransaction'Variants -> String)
-> ([RefundFailureBalanceTransaction'Variants] -> ShowS)
-> Show RefundFailureBalanceTransaction'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RefundFailureBalanceTransaction'Variants] -> ShowS
$cshowList :: [RefundFailureBalanceTransaction'Variants] -> ShowS
show :: RefundFailureBalanceTransaction'Variants -> String
$cshow :: RefundFailureBalanceTransaction'Variants -> String
showsPrec :: Int -> RefundFailureBalanceTransaction'Variants -> ShowS
$cshowsPrec :: Int -> RefundFailureBalanceTransaction'Variants -> ShowS
GHC.Show.Show, RefundFailureBalanceTransaction'Variants
-> RefundFailureBalanceTransaction'Variants -> Bool
(RefundFailureBalanceTransaction'Variants
 -> RefundFailureBalanceTransaction'Variants -> Bool)
-> (RefundFailureBalanceTransaction'Variants
    -> RefundFailureBalanceTransaction'Variants -> Bool)
-> Eq RefundFailureBalanceTransaction'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RefundFailureBalanceTransaction'Variants
-> RefundFailureBalanceTransaction'Variants -> Bool
$c/= :: RefundFailureBalanceTransaction'Variants
-> RefundFailureBalanceTransaction'Variants -> Bool
== :: RefundFailureBalanceTransaction'Variants
-> RefundFailureBalanceTransaction'Variants -> Bool
$c== :: RefundFailureBalanceTransaction'Variants
-> RefundFailureBalanceTransaction'Variants -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON RefundFailureBalanceTransaction'Variants where
  toJSON :: RefundFailureBalanceTransaction'Variants -> Value
toJSON (RefundFailureBalanceTransaction'Text Text
a) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
a
  toJSON (RefundFailureBalanceTransaction'BalanceTransaction BalanceTransaction
a) = BalanceTransaction -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON BalanceTransaction
a

instance Data.Aeson.Types.FromJSON.FromJSON RefundFailureBalanceTransaction'Variants where
  parseJSON :: Value -> Parser RefundFailureBalanceTransaction'Variants
parseJSON Value
val = case (Text -> RefundFailureBalanceTransaction'Variants
RefundFailureBalanceTransaction'Text (Text -> RefundFailureBalanceTransaction'Variants)
-> Result Text -> Result RefundFailureBalanceTransaction'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result Text
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundFailureBalanceTransaction'Variants
-> Result RefundFailureBalanceTransaction'Variants
-> Result RefundFailureBalanceTransaction'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> ((BalanceTransaction -> RefundFailureBalanceTransaction'Variants
RefundFailureBalanceTransaction'BalanceTransaction (BalanceTransaction -> RefundFailureBalanceTransaction'Variants)
-> Result BalanceTransaction
-> Result RefundFailureBalanceTransaction'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result BalanceTransaction
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundFailureBalanceTransaction'Variants
-> Result RefundFailureBalanceTransaction'Variants
-> Result RefundFailureBalanceTransaction'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String -> Result RefundFailureBalanceTransaction'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched") of
    Data.Aeson.Types.Internal.Success RefundFailureBalanceTransaction'Variants
a -> RefundFailureBalanceTransaction'Variants
-> Parser RefundFailureBalanceTransaction'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure RefundFailureBalanceTransaction'Variants
a
    Data.Aeson.Types.Internal.Error String
a -> String -> Parser RefundFailureBalanceTransaction'Variants
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
a

-- | Defines the oneOf schema located at @components.schemas.refund.properties.payment_intent.anyOf@ in the specification.
--
-- ID of the PaymentIntent that was refunded.
data RefundPaymentIntent'Variants
  = RefundPaymentIntent'Text Data.Text.Internal.Text
  | RefundPaymentIntent'PaymentIntent PaymentIntent
  deriving (Int -> RefundPaymentIntent'Variants -> ShowS
[RefundPaymentIntent'Variants] -> ShowS
RefundPaymentIntent'Variants -> String
(Int -> RefundPaymentIntent'Variants -> ShowS)
-> (RefundPaymentIntent'Variants -> String)
-> ([RefundPaymentIntent'Variants] -> ShowS)
-> Show RefundPaymentIntent'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RefundPaymentIntent'Variants] -> ShowS
$cshowList :: [RefundPaymentIntent'Variants] -> ShowS
show :: RefundPaymentIntent'Variants -> String
$cshow :: RefundPaymentIntent'Variants -> String
showsPrec :: Int -> RefundPaymentIntent'Variants -> ShowS
$cshowsPrec :: Int -> RefundPaymentIntent'Variants -> ShowS
GHC.Show.Show, RefundPaymentIntent'Variants
-> RefundPaymentIntent'Variants -> Bool
(RefundPaymentIntent'Variants
 -> RefundPaymentIntent'Variants -> Bool)
-> (RefundPaymentIntent'Variants
    -> RefundPaymentIntent'Variants -> Bool)
-> Eq RefundPaymentIntent'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RefundPaymentIntent'Variants
-> RefundPaymentIntent'Variants -> Bool
$c/= :: RefundPaymentIntent'Variants
-> RefundPaymentIntent'Variants -> Bool
== :: RefundPaymentIntent'Variants
-> RefundPaymentIntent'Variants -> Bool
$c== :: RefundPaymentIntent'Variants
-> RefundPaymentIntent'Variants -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON RefundPaymentIntent'Variants where
  toJSON :: RefundPaymentIntent'Variants -> Value
toJSON (RefundPaymentIntent'Text Text
a) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
a
  toJSON (RefundPaymentIntent'PaymentIntent PaymentIntent
a) = PaymentIntent -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON PaymentIntent
a

instance Data.Aeson.Types.FromJSON.FromJSON RefundPaymentIntent'Variants where
  parseJSON :: Value -> Parser RefundPaymentIntent'Variants
parseJSON Value
val = case (Text -> RefundPaymentIntent'Variants
RefundPaymentIntent'Text (Text -> RefundPaymentIntent'Variants)
-> Result Text -> Result RefundPaymentIntent'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result Text
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundPaymentIntent'Variants
-> Result RefundPaymentIntent'Variants
-> Result RefundPaymentIntent'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> ((PaymentIntent -> RefundPaymentIntent'Variants
RefundPaymentIntent'PaymentIntent (PaymentIntent -> RefundPaymentIntent'Variants)
-> Result PaymentIntent -> Result RefundPaymentIntent'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result PaymentIntent
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundPaymentIntent'Variants
-> Result RefundPaymentIntent'Variants
-> Result RefundPaymentIntent'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String -> Result RefundPaymentIntent'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched") of
    Data.Aeson.Types.Internal.Success RefundPaymentIntent'Variants
a -> RefundPaymentIntent'Variants -> Parser RefundPaymentIntent'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure RefundPaymentIntent'Variants
a
    Data.Aeson.Types.Internal.Error String
a -> String -> Parser RefundPaymentIntent'Variants
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
a

-- | Defines the oneOf schema located at @components.schemas.refund.properties.source_transfer_reversal.anyOf@ in the specification.
--
-- The transfer reversal that is associated with the refund. Only present if the charge came from another Stripe account. See the Connect documentation for details.
data RefundSourceTransferReversal'Variants
  = RefundSourceTransferReversal'Text Data.Text.Internal.Text
  | RefundSourceTransferReversal'TransferReversal TransferReversal
  deriving (Int -> RefundSourceTransferReversal'Variants -> ShowS
[RefundSourceTransferReversal'Variants] -> ShowS
RefundSourceTransferReversal'Variants -> String
(Int -> RefundSourceTransferReversal'Variants -> ShowS)
-> (RefundSourceTransferReversal'Variants -> String)
-> ([RefundSourceTransferReversal'Variants] -> ShowS)
-> Show RefundSourceTransferReversal'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RefundSourceTransferReversal'Variants] -> ShowS
$cshowList :: [RefundSourceTransferReversal'Variants] -> ShowS
show :: RefundSourceTransferReversal'Variants -> String
$cshow :: RefundSourceTransferReversal'Variants -> String
showsPrec :: Int -> RefundSourceTransferReversal'Variants -> ShowS
$cshowsPrec :: Int -> RefundSourceTransferReversal'Variants -> ShowS
GHC.Show.Show, RefundSourceTransferReversal'Variants
-> RefundSourceTransferReversal'Variants -> Bool
(RefundSourceTransferReversal'Variants
 -> RefundSourceTransferReversal'Variants -> Bool)
-> (RefundSourceTransferReversal'Variants
    -> RefundSourceTransferReversal'Variants -> Bool)
-> Eq RefundSourceTransferReversal'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RefundSourceTransferReversal'Variants
-> RefundSourceTransferReversal'Variants -> Bool
$c/= :: RefundSourceTransferReversal'Variants
-> RefundSourceTransferReversal'Variants -> Bool
== :: RefundSourceTransferReversal'Variants
-> RefundSourceTransferReversal'Variants -> Bool
$c== :: RefundSourceTransferReversal'Variants
-> RefundSourceTransferReversal'Variants -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON RefundSourceTransferReversal'Variants where
  toJSON :: RefundSourceTransferReversal'Variants -> Value
toJSON (RefundSourceTransferReversal'Text Text
a) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
a
  toJSON (RefundSourceTransferReversal'TransferReversal TransferReversal
a) = TransferReversal -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON TransferReversal
a

instance Data.Aeson.Types.FromJSON.FromJSON RefundSourceTransferReversal'Variants where
  parseJSON :: Value -> Parser RefundSourceTransferReversal'Variants
parseJSON Value
val = case (Text -> RefundSourceTransferReversal'Variants
RefundSourceTransferReversal'Text (Text -> RefundSourceTransferReversal'Variants)
-> Result Text -> Result RefundSourceTransferReversal'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result Text
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundSourceTransferReversal'Variants
-> Result RefundSourceTransferReversal'Variants
-> Result RefundSourceTransferReversal'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> ((TransferReversal -> RefundSourceTransferReversal'Variants
RefundSourceTransferReversal'TransferReversal (TransferReversal -> RefundSourceTransferReversal'Variants)
-> Result TransferReversal
-> Result RefundSourceTransferReversal'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result TransferReversal
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundSourceTransferReversal'Variants
-> Result RefundSourceTransferReversal'Variants
-> Result RefundSourceTransferReversal'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String -> Result RefundSourceTransferReversal'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched") of
    Data.Aeson.Types.Internal.Success RefundSourceTransferReversal'Variants
a -> RefundSourceTransferReversal'Variants
-> Parser RefundSourceTransferReversal'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure RefundSourceTransferReversal'Variants
a
    Data.Aeson.Types.Internal.Error String
a -> String -> Parser RefundSourceTransferReversal'Variants
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
a

-- | Defines the oneOf schema located at @components.schemas.refund.properties.transfer_reversal.anyOf@ in the specification.
--
-- If the accompanying transfer was reversed, the transfer reversal object. Only applicable if the charge was created using the destination parameter.
data RefundTransferReversal'Variants
  = RefundTransferReversal'Text Data.Text.Internal.Text
  | RefundTransferReversal'TransferReversal TransferReversal
  deriving (Int -> RefundTransferReversal'Variants -> ShowS
[RefundTransferReversal'Variants] -> ShowS
RefundTransferReversal'Variants -> String
(Int -> RefundTransferReversal'Variants -> ShowS)
-> (RefundTransferReversal'Variants -> String)
-> ([RefundTransferReversal'Variants] -> ShowS)
-> Show RefundTransferReversal'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RefundTransferReversal'Variants] -> ShowS
$cshowList :: [RefundTransferReversal'Variants] -> ShowS
show :: RefundTransferReversal'Variants -> String
$cshow :: RefundTransferReversal'Variants -> String
showsPrec :: Int -> RefundTransferReversal'Variants -> ShowS
$cshowsPrec :: Int -> RefundTransferReversal'Variants -> ShowS
GHC.Show.Show, RefundTransferReversal'Variants
-> RefundTransferReversal'Variants -> Bool
(RefundTransferReversal'Variants
 -> RefundTransferReversal'Variants -> Bool)
-> (RefundTransferReversal'Variants
    -> RefundTransferReversal'Variants -> Bool)
-> Eq RefundTransferReversal'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RefundTransferReversal'Variants
-> RefundTransferReversal'Variants -> Bool
$c/= :: RefundTransferReversal'Variants
-> RefundTransferReversal'Variants -> Bool
== :: RefundTransferReversal'Variants
-> RefundTransferReversal'Variants -> Bool
$c== :: RefundTransferReversal'Variants
-> RefundTransferReversal'Variants -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON RefundTransferReversal'Variants where
  toJSON :: RefundTransferReversal'Variants -> Value
toJSON (RefundTransferReversal'Text Text
a) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
a
  toJSON (RefundTransferReversal'TransferReversal TransferReversal
a) = TransferReversal -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON TransferReversal
a

instance Data.Aeson.Types.FromJSON.FromJSON RefundTransferReversal'Variants where
  parseJSON :: Value -> Parser RefundTransferReversal'Variants
parseJSON Value
val = case (Text -> RefundTransferReversal'Variants
RefundTransferReversal'Text (Text -> RefundTransferReversal'Variants)
-> Result Text -> Result RefundTransferReversal'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result Text
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundTransferReversal'Variants
-> Result RefundTransferReversal'Variants
-> Result RefundTransferReversal'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> ((TransferReversal -> RefundTransferReversal'Variants
RefundTransferReversal'TransferReversal (TransferReversal -> RefundTransferReversal'Variants)
-> Result TransferReversal
-> Result RefundTransferReversal'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result TransferReversal
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result RefundTransferReversal'Variants
-> Result RefundTransferReversal'Variants
-> Result RefundTransferReversal'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String -> Result RefundTransferReversal'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched") of
    Data.Aeson.Types.Internal.Success RefundTransferReversal'Variants
a -> RefundTransferReversal'Variants
-> Parser RefundTransferReversal'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure RefundTransferReversal'Variants
a
    Data.Aeson.Types.Internal.Error String
a -> String -> Parser RefundTransferReversal'Variants
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
a