{-# 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 PaymentMethodDetailsCard
module StripeAPI.Types.PaymentMethodDetailsCard 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.PaymentMethodDetailsCardChecks
import {-# SOURCE #-} StripeAPI.Types.PaymentMethodDetailsCardInstallments
import {-# SOURCE #-} StripeAPI.Types.PaymentMethodDetailsCardInstallmentsPlan
import {-# SOURCE #-} StripeAPI.Types.PaymentMethodDetailsCardWallet
import {-# SOURCE #-} StripeAPI.Types.PaymentMethodDetailsCardWalletMasterpass
import {-# SOURCE #-} StripeAPI.Types.PaymentMethodDetailsCardWalletVisaCheckout
import {-# SOURCE #-} StripeAPI.Types.ThreeDSecureDetails
import qualified Prelude as GHC.Integer.Type
import qualified Prelude as GHC.Maybe

-- | Defines the object schema located at @components.schemas.payment_method_details_card@ in the specification.
data PaymentMethodDetailsCard = PaymentMethodDetailsCard
  { -- | brand: Card brand. Can be \`amex\`, \`diners\`, \`discover\`, \`jcb\`, \`mastercard\`, \`unionpay\`, \`visa\`, or \`unknown\`.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardBrand :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | checks: Check results by Card networks on Card address and CVC at time of payment.
    PaymentMethodDetailsCard -> Maybe PaymentMethodDetailsCardChecks'
paymentMethodDetailsCardChecks :: (GHC.Maybe.Maybe PaymentMethodDetailsCardChecks'),
    -- | country: Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you\'ve collected.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardCountry :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | exp_month: Two-digit number representing the card\'s expiration month.
    PaymentMethodDetailsCard -> Int
paymentMethodDetailsCardExpMonth :: GHC.Types.Int,
    -- | exp_year: Four-digit number representing the card\'s expiration year.
    PaymentMethodDetailsCard -> Int
paymentMethodDetailsCardExpYear :: GHC.Types.Int,
    -- | fingerprint: Uniquely identifies this particular card number. You can use this attribute to check whether two customers who’ve signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number.
    --
    -- *Starting May 1, 2021, card fingerprint in India for Connect will change to allow two fingerprints for the same card --- one for India and one for the rest of the world.*
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardFingerprint :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | funding: Card funding type. Can be \`credit\`, \`debit\`, \`prepaid\`, or \`unknown\`.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardFunding :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | installments: Installment details for this payment (Mexico only).
    --
    -- For more information, see the [installments integration guide](https:\/\/stripe.com\/docs\/payments\/installments).
    PaymentMethodDetailsCard
-> Maybe PaymentMethodDetailsCardInstallments'
paymentMethodDetailsCardInstallments :: (GHC.Maybe.Maybe PaymentMethodDetailsCardInstallments'),
    -- | last4: The last four digits of the card.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardLast4 :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | network: Identifies which network this charge was processed on. Can be \`amex\`, \`cartes_bancaires\`, \`diners\`, \`discover\`, \`interac\`, \`jcb\`, \`mastercard\`, \`unionpay\`, \`visa\`, or \`unknown\`.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardNetwork :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | three_d_secure: Populated if this transaction used 3D Secure authentication.
    PaymentMethodDetailsCard
-> Maybe PaymentMethodDetailsCardThreeDSecure'
paymentMethodDetailsCardThreeDSecure :: (GHC.Maybe.Maybe PaymentMethodDetailsCardThreeDSecure'),
    -- | wallet: If this Card is part of a card wallet, this contains the details of the card wallet.
    PaymentMethodDetailsCard -> Maybe PaymentMethodDetailsCardWallet'
paymentMethodDetailsCardWallet :: (GHC.Maybe.Maybe PaymentMethodDetailsCardWallet')
  }
  deriving
    ( Int -> PaymentMethodDetailsCard -> ShowS
[PaymentMethodDetailsCard] -> ShowS
PaymentMethodDetailsCard -> String
(Int -> PaymentMethodDetailsCard -> ShowS)
-> (PaymentMethodDetailsCard -> String)
-> ([PaymentMethodDetailsCard] -> ShowS)
-> Show PaymentMethodDetailsCard
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCard] -> ShowS
$cshowList :: [PaymentMethodDetailsCard] -> ShowS
show :: PaymentMethodDetailsCard -> String
$cshow :: PaymentMethodDetailsCard -> String
showsPrec :: Int -> PaymentMethodDetailsCard -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsCard -> ShowS
GHC.Show.Show,
      PaymentMethodDetailsCard -> PaymentMethodDetailsCard -> Bool
(PaymentMethodDetailsCard -> PaymentMethodDetailsCard -> Bool)
-> (PaymentMethodDetailsCard -> PaymentMethodDetailsCard -> Bool)
-> Eq PaymentMethodDetailsCard
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCard -> PaymentMethodDetailsCard -> Bool
$c/= :: PaymentMethodDetailsCard -> PaymentMethodDetailsCard -> Bool
== :: PaymentMethodDetailsCard -> PaymentMethodDetailsCard -> Bool
$c== :: PaymentMethodDetailsCard -> PaymentMethodDetailsCard -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsCard where
  toJSON :: PaymentMethodDetailsCard -> Value
toJSON PaymentMethodDetailsCard
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"brand" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardBrand PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"checks" Text -> Maybe PaymentMethodDetailsCardChecks' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe PaymentMethodDetailsCardChecks'
paymentMethodDetailsCardChecks PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"country" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardCountry PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"exp_month" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Int
paymentMethodDetailsCardExpMonth PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"exp_year" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Int
paymentMethodDetailsCardExpYear PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"fingerprint" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardFingerprint PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"funding" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardFunding PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"installments" Text -> Maybe PaymentMethodDetailsCardInstallments' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard
-> Maybe PaymentMethodDetailsCardInstallments'
paymentMethodDetailsCardInstallments PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"last4" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardLast4 PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"network" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardNetwork PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"three_d_secure" Text -> Maybe PaymentMethodDetailsCardThreeDSecure' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard
-> Maybe PaymentMethodDetailsCardThreeDSecure'
paymentMethodDetailsCardThreeDSecure PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"wallet" Text -> Maybe PaymentMethodDetailsCardWallet' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe PaymentMethodDetailsCardWallet'
paymentMethodDetailsCardWallet PaymentMethodDetailsCard
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PaymentMethodDetailsCard -> Encoding
toEncoding PaymentMethodDetailsCard
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"brand" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardBrand PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"checks" Text -> Maybe PaymentMethodDetailsCardChecks' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe PaymentMethodDetailsCardChecks'
paymentMethodDetailsCardChecks PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"country" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardCountry PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"exp_month" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Int
paymentMethodDetailsCardExpMonth PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"exp_year" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Int
paymentMethodDetailsCardExpYear PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"fingerprint" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardFingerprint PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"funding" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardFunding PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"installments" Text -> Maybe PaymentMethodDetailsCardInstallments' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard
-> Maybe PaymentMethodDetailsCardInstallments'
paymentMethodDetailsCardInstallments PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"last4" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardLast4 PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"network" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe Text
paymentMethodDetailsCardNetwork PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"three_d_secure" Text -> Maybe PaymentMethodDetailsCardThreeDSecure' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard
-> Maybe PaymentMethodDetailsCardThreeDSecure'
paymentMethodDetailsCardThreeDSecure PaymentMethodDetailsCard
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"wallet" Text -> Maybe PaymentMethodDetailsCardWallet' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCard -> Maybe PaymentMethodDetailsCardWallet'
paymentMethodDetailsCardWallet PaymentMethodDetailsCard
obj))))))))))))

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsCard where
  parseJSON :: Value -> Parser PaymentMethodDetailsCard
parseJSON = String
-> (Object -> Parser PaymentMethodDetailsCard)
-> Value
-> Parser PaymentMethodDetailsCard
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PaymentMethodDetailsCard" (\Object
obj -> ((((((((((((Maybe Text
 -> Maybe PaymentMethodDetailsCardChecks'
 -> Maybe Text
 -> Int
 -> Int
 -> Maybe Text
 -> Maybe Text
 -> Maybe PaymentMethodDetailsCardInstallments'
 -> Maybe Text
 -> Maybe Text
 -> Maybe PaymentMethodDetailsCardThreeDSecure'
 -> Maybe PaymentMethodDetailsCardWallet'
 -> PaymentMethodDetailsCard)
-> Parser
     (Maybe Text
      -> Maybe PaymentMethodDetailsCardChecks'
      -> Maybe Text
      -> Int
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardInstallments'
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Text
-> Maybe PaymentMethodDetailsCardChecks'
-> Maybe Text
-> Int
-> Int
-> Maybe Text
-> Maybe Text
-> Maybe PaymentMethodDetailsCardInstallments'
-> Maybe Text
-> Maybe Text
-> Maybe PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardWallet'
-> PaymentMethodDetailsCard
PaymentMethodDetailsCard Parser
  (Maybe Text
   -> Maybe PaymentMethodDetailsCardChecks'
   -> Maybe Text
   -> Int
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardInstallments'
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser (Maybe Text)
-> Parser
     (Maybe PaymentMethodDetailsCardChecks'
      -> Maybe Text
      -> Int
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardInstallments'
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
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
"brand")) Parser
  (Maybe PaymentMethodDetailsCardChecks'
   -> Maybe Text
   -> Int
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardInstallments'
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser (Maybe PaymentMethodDetailsCardChecks')
-> Parser
     (Maybe Text
      -> Int
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardInstallments'
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe PaymentMethodDetailsCardChecks')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"checks")) Parser
  (Maybe Text
   -> Int
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardInstallments'
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser (Maybe Text)
-> Parser
     (Int
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardInstallments'
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
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
"country")) Parser
  (Int
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardInstallments'
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser Int
-> Parser
     (Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardInstallments'
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
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
"exp_month")) Parser
  (Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardInstallments'
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser Int
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardInstallments'
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
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
"exp_year")) Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardInstallments'
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe PaymentMethodDetailsCardInstallments'
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
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
"fingerprint")) Parser
  (Maybe Text
   -> Maybe PaymentMethodDetailsCardInstallments'
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser (Maybe Text)
-> Parser
     (Maybe PaymentMethodDetailsCardInstallments'
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
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
"funding")) Parser
  (Maybe PaymentMethodDetailsCardInstallments'
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser (Maybe PaymentMethodDetailsCardInstallments')
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text -> Parser (Maybe PaymentMethodDetailsCardInstallments')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"installments")) Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
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
"last4")) Parser
  (Maybe Text
   -> Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser (Maybe Text)
-> Parser
     (Maybe PaymentMethodDetailsCardThreeDSecure'
      -> Maybe PaymentMethodDetailsCardWallet'
      -> PaymentMethodDetailsCard)
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
"network")) Parser
  (Maybe PaymentMethodDetailsCardThreeDSecure'
   -> Maybe PaymentMethodDetailsCardWallet'
   -> PaymentMethodDetailsCard)
-> Parser (Maybe PaymentMethodDetailsCardThreeDSecure')
-> Parser
     (Maybe PaymentMethodDetailsCardWallet' -> PaymentMethodDetailsCard)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text -> Parser (Maybe PaymentMethodDetailsCardThreeDSecure')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"three_d_secure")) Parser
  (Maybe PaymentMethodDetailsCardWallet' -> PaymentMethodDetailsCard)
-> Parser (Maybe PaymentMethodDetailsCardWallet')
-> Parser PaymentMethodDetailsCard
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe PaymentMethodDetailsCardWallet')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"wallet"))

-- | Create a new 'PaymentMethodDetailsCard' with all required fields.
mkPaymentMethodDetailsCard ::
  -- | 'paymentMethodDetailsCardExpMonth'
  GHC.Types.Int ->
  -- | 'paymentMethodDetailsCardExpYear'
  GHC.Types.Int ->
  PaymentMethodDetailsCard
mkPaymentMethodDetailsCard :: Int -> Int -> PaymentMethodDetailsCard
mkPaymentMethodDetailsCard Int
paymentMethodDetailsCardExpMonth Int
paymentMethodDetailsCardExpYear =
  PaymentMethodDetailsCard :: Maybe Text
-> Maybe PaymentMethodDetailsCardChecks'
-> Maybe Text
-> Int
-> Int
-> Maybe Text
-> Maybe Text
-> Maybe PaymentMethodDetailsCardInstallments'
-> Maybe Text
-> Maybe Text
-> Maybe PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardWallet'
-> PaymentMethodDetailsCard
PaymentMethodDetailsCard
    { paymentMethodDetailsCardBrand :: Maybe Text
paymentMethodDetailsCardBrand = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardChecks :: Maybe PaymentMethodDetailsCardChecks'
paymentMethodDetailsCardChecks = Maybe PaymentMethodDetailsCardChecks'
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardCountry :: Maybe Text
paymentMethodDetailsCardCountry = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardExpMonth :: Int
paymentMethodDetailsCardExpMonth = Int
paymentMethodDetailsCardExpMonth,
      paymentMethodDetailsCardExpYear :: Int
paymentMethodDetailsCardExpYear = Int
paymentMethodDetailsCardExpYear,
      paymentMethodDetailsCardFingerprint :: Maybe Text
paymentMethodDetailsCardFingerprint = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardFunding :: Maybe Text
paymentMethodDetailsCardFunding = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardInstallments :: Maybe PaymentMethodDetailsCardInstallments'
paymentMethodDetailsCardInstallments = Maybe PaymentMethodDetailsCardInstallments'
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardLast4 :: Maybe Text
paymentMethodDetailsCardLast4 = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardNetwork :: Maybe Text
paymentMethodDetailsCardNetwork = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardThreeDSecure :: Maybe PaymentMethodDetailsCardThreeDSecure'
paymentMethodDetailsCardThreeDSecure = Maybe PaymentMethodDetailsCardThreeDSecure'
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardWallet :: Maybe PaymentMethodDetailsCardWallet'
paymentMethodDetailsCardWallet = Maybe PaymentMethodDetailsCardWallet'
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the object schema located at @components.schemas.payment_method_details_card.properties.checks.anyOf@ in the specification.
--
-- Check results by Card networks on Card address and CVC at time of payment.
data PaymentMethodDetailsCardChecks' = PaymentMethodDetailsCardChecks'
  { -- | address_line1_check: If a address line1 was provided, results of the check, one of \`pass\`, \`fail\`, \`unavailable\`, or \`unchecked\`.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsCardChecks' -> Maybe Text
paymentMethodDetailsCardChecks'AddressLine1Check :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | address_postal_code_check: If a address postal code was provided, results of the check, one of \`pass\`, \`fail\`, \`unavailable\`, or \`unchecked\`.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsCardChecks' -> Maybe Text
paymentMethodDetailsCardChecks'AddressPostalCodeCheck :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | cvc_check: If a CVC was provided, results of the check, one of \`pass\`, \`fail\`, \`unavailable\`, or \`unchecked\`.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsCardChecks' -> Maybe Text
paymentMethodDetailsCardChecks'CvcCheck :: (GHC.Maybe.Maybe Data.Text.Internal.Text)
  }
  deriving
    ( Int -> PaymentMethodDetailsCardChecks' -> ShowS
[PaymentMethodDetailsCardChecks'] -> ShowS
PaymentMethodDetailsCardChecks' -> String
(Int -> PaymentMethodDetailsCardChecks' -> ShowS)
-> (PaymentMethodDetailsCardChecks' -> String)
-> ([PaymentMethodDetailsCardChecks'] -> ShowS)
-> Show PaymentMethodDetailsCardChecks'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCardChecks'] -> ShowS
$cshowList :: [PaymentMethodDetailsCardChecks'] -> ShowS
show :: PaymentMethodDetailsCardChecks' -> String
$cshow :: PaymentMethodDetailsCardChecks' -> String
showsPrec :: Int -> PaymentMethodDetailsCardChecks' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsCardChecks' -> ShowS
GHC.Show.Show,
      PaymentMethodDetailsCardChecks'
-> PaymentMethodDetailsCardChecks' -> Bool
(PaymentMethodDetailsCardChecks'
 -> PaymentMethodDetailsCardChecks' -> Bool)
-> (PaymentMethodDetailsCardChecks'
    -> PaymentMethodDetailsCardChecks' -> Bool)
-> Eq PaymentMethodDetailsCardChecks'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCardChecks'
-> PaymentMethodDetailsCardChecks' -> Bool
$c/= :: PaymentMethodDetailsCardChecks'
-> PaymentMethodDetailsCardChecks' -> Bool
== :: PaymentMethodDetailsCardChecks'
-> PaymentMethodDetailsCardChecks' -> Bool
$c== :: PaymentMethodDetailsCardChecks'
-> PaymentMethodDetailsCardChecks' -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsCardChecks' where
  toJSON :: PaymentMethodDetailsCardChecks' -> Value
toJSON PaymentMethodDetailsCardChecks'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"address_line1_check" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardChecks' -> Maybe Text
paymentMethodDetailsCardChecks'AddressLine1Check PaymentMethodDetailsCardChecks'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"address_postal_code_check" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardChecks' -> Maybe Text
paymentMethodDetailsCardChecks'AddressPostalCodeCheck PaymentMethodDetailsCardChecks'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"cvc_check" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardChecks' -> Maybe Text
paymentMethodDetailsCardChecks'CvcCheck PaymentMethodDetailsCardChecks'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PaymentMethodDetailsCardChecks' -> Encoding
toEncoding PaymentMethodDetailsCardChecks'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"address_line1_check" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardChecks' -> Maybe Text
paymentMethodDetailsCardChecks'AddressLine1Check PaymentMethodDetailsCardChecks'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"address_postal_code_check" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardChecks' -> Maybe Text
paymentMethodDetailsCardChecks'AddressPostalCodeCheck PaymentMethodDetailsCardChecks'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"cvc_check" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardChecks' -> Maybe Text
paymentMethodDetailsCardChecks'CvcCheck PaymentMethodDetailsCardChecks'
obj)))

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsCardChecks' where
  parseJSON :: Value -> Parser PaymentMethodDetailsCardChecks'
parseJSON = String
-> (Object -> Parser PaymentMethodDetailsCardChecks')
-> Value
-> Parser PaymentMethodDetailsCardChecks'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PaymentMethodDetailsCardChecks'" (\Object
obj -> (((Maybe Text
 -> Maybe Text -> Maybe Text -> PaymentMethodDetailsCardChecks')
-> Parser
     (Maybe Text
      -> Maybe Text -> Maybe Text -> PaymentMethodDetailsCardChecks')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Text
-> Maybe Text -> Maybe Text -> PaymentMethodDetailsCardChecks'
PaymentMethodDetailsCardChecks' Parser
  (Maybe Text
   -> Maybe Text -> Maybe Text -> PaymentMethodDetailsCardChecks')
-> Parser (Maybe Text)
-> Parser
     (Maybe Text -> Maybe Text -> PaymentMethodDetailsCardChecks')
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
"address_line1_check")) Parser
  (Maybe Text -> Maybe Text -> PaymentMethodDetailsCardChecks')
-> Parser (Maybe Text)
-> Parser (Maybe Text -> PaymentMethodDetailsCardChecks')
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
"address_postal_code_check")) Parser (Maybe Text -> PaymentMethodDetailsCardChecks')
-> Parser (Maybe Text) -> Parser PaymentMethodDetailsCardChecks'
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
"cvc_check"))

-- | Create a new 'PaymentMethodDetailsCardChecks'' with all required fields.
mkPaymentMethodDetailsCardChecks' :: PaymentMethodDetailsCardChecks'
mkPaymentMethodDetailsCardChecks' :: PaymentMethodDetailsCardChecks'
mkPaymentMethodDetailsCardChecks' =
  PaymentMethodDetailsCardChecks' :: Maybe Text
-> Maybe Text -> Maybe Text -> PaymentMethodDetailsCardChecks'
PaymentMethodDetailsCardChecks'
    { paymentMethodDetailsCardChecks'AddressLine1Check :: Maybe Text
paymentMethodDetailsCardChecks'AddressLine1Check = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardChecks'AddressPostalCodeCheck :: Maybe Text
paymentMethodDetailsCardChecks'AddressPostalCodeCheck = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardChecks'CvcCheck :: Maybe Text
paymentMethodDetailsCardChecks'CvcCheck = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the object schema located at @components.schemas.payment_method_details_card.properties.installments.anyOf@ in the specification.
--
-- Installment details for this payment (Mexico only).
--
-- For more information, see the [installments integration guide](https:\\\/\\\/stripe.com\\\/docs\\\/payments\\\/installments).
data PaymentMethodDetailsCardInstallments' = PaymentMethodDetailsCardInstallments'
  { -- | plan: Installment plan selected for the payment.
    PaymentMethodDetailsCardInstallments'
-> Maybe PaymentMethodDetailsCardInstallments'Plan'
paymentMethodDetailsCardInstallments'Plan :: (GHC.Maybe.Maybe PaymentMethodDetailsCardInstallments'Plan')
  }
  deriving
    ( Int -> PaymentMethodDetailsCardInstallments' -> ShowS
[PaymentMethodDetailsCardInstallments'] -> ShowS
PaymentMethodDetailsCardInstallments' -> String
(Int -> PaymentMethodDetailsCardInstallments' -> ShowS)
-> (PaymentMethodDetailsCardInstallments' -> String)
-> ([PaymentMethodDetailsCardInstallments'] -> ShowS)
-> Show PaymentMethodDetailsCardInstallments'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCardInstallments'] -> ShowS
$cshowList :: [PaymentMethodDetailsCardInstallments'] -> ShowS
show :: PaymentMethodDetailsCardInstallments' -> String
$cshow :: PaymentMethodDetailsCardInstallments' -> String
showsPrec :: Int -> PaymentMethodDetailsCardInstallments' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsCardInstallments' -> ShowS
GHC.Show.Show,
      PaymentMethodDetailsCardInstallments'
-> PaymentMethodDetailsCardInstallments' -> Bool
(PaymentMethodDetailsCardInstallments'
 -> PaymentMethodDetailsCardInstallments' -> Bool)
-> (PaymentMethodDetailsCardInstallments'
    -> PaymentMethodDetailsCardInstallments' -> Bool)
-> Eq PaymentMethodDetailsCardInstallments'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCardInstallments'
-> PaymentMethodDetailsCardInstallments' -> Bool
$c/= :: PaymentMethodDetailsCardInstallments'
-> PaymentMethodDetailsCardInstallments' -> Bool
== :: PaymentMethodDetailsCardInstallments'
-> PaymentMethodDetailsCardInstallments' -> Bool
$c== :: PaymentMethodDetailsCardInstallments'
-> PaymentMethodDetailsCardInstallments' -> Bool
GHC.Classes.Eq
    )

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

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

-- | Create a new 'PaymentMethodDetailsCardInstallments'' with all required fields.
mkPaymentMethodDetailsCardInstallments' :: PaymentMethodDetailsCardInstallments'
mkPaymentMethodDetailsCardInstallments' :: PaymentMethodDetailsCardInstallments'
mkPaymentMethodDetailsCardInstallments' = PaymentMethodDetailsCardInstallments' :: Maybe PaymentMethodDetailsCardInstallments'Plan'
-> PaymentMethodDetailsCardInstallments'
PaymentMethodDetailsCardInstallments' {paymentMethodDetailsCardInstallments'Plan :: Maybe PaymentMethodDetailsCardInstallments'Plan'
paymentMethodDetailsCardInstallments'Plan = Maybe PaymentMethodDetailsCardInstallments'Plan'
forall a. Maybe a
GHC.Maybe.Nothing}

-- | Defines the object schema located at @components.schemas.payment_method_details_card.properties.installments.anyOf.properties.plan.anyOf@ in the specification.
--
-- Installment plan selected for the payment.
data PaymentMethodDetailsCardInstallments'Plan' = PaymentMethodDetailsCardInstallments'Plan'
  { -- | count: For \`fixed_count\` installment plans, this is the number of installment payments your customer will make to their credit card.
    PaymentMethodDetailsCardInstallments'Plan' -> Maybe Int
paymentMethodDetailsCardInstallments'Plan'Count :: (GHC.Maybe.Maybe GHC.Types.Int)
  }
  deriving
    ( Int -> PaymentMethodDetailsCardInstallments'Plan' -> ShowS
[PaymentMethodDetailsCardInstallments'Plan'] -> ShowS
PaymentMethodDetailsCardInstallments'Plan' -> String
(Int -> PaymentMethodDetailsCardInstallments'Plan' -> ShowS)
-> (PaymentMethodDetailsCardInstallments'Plan' -> String)
-> ([PaymentMethodDetailsCardInstallments'Plan'] -> ShowS)
-> Show PaymentMethodDetailsCardInstallments'Plan'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCardInstallments'Plan'] -> ShowS
$cshowList :: [PaymentMethodDetailsCardInstallments'Plan'] -> ShowS
show :: PaymentMethodDetailsCardInstallments'Plan' -> String
$cshow :: PaymentMethodDetailsCardInstallments'Plan' -> String
showsPrec :: Int -> PaymentMethodDetailsCardInstallments'Plan' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsCardInstallments'Plan' -> ShowS
GHC.Show.Show,
      PaymentMethodDetailsCardInstallments'Plan'
-> PaymentMethodDetailsCardInstallments'Plan' -> Bool
(PaymentMethodDetailsCardInstallments'Plan'
 -> PaymentMethodDetailsCardInstallments'Plan' -> Bool)
-> (PaymentMethodDetailsCardInstallments'Plan'
    -> PaymentMethodDetailsCardInstallments'Plan' -> Bool)
-> Eq PaymentMethodDetailsCardInstallments'Plan'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCardInstallments'Plan'
-> PaymentMethodDetailsCardInstallments'Plan' -> Bool
$c/= :: PaymentMethodDetailsCardInstallments'Plan'
-> PaymentMethodDetailsCardInstallments'Plan' -> Bool
== :: PaymentMethodDetailsCardInstallments'Plan'
-> PaymentMethodDetailsCardInstallments'Plan' -> Bool
$c== :: PaymentMethodDetailsCardInstallments'Plan'
-> PaymentMethodDetailsCardInstallments'Plan' -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsCardInstallments'Plan' where
  toJSON :: PaymentMethodDetailsCardInstallments'Plan' -> Value
toJSON PaymentMethodDetailsCardInstallments'Plan'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"count" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardInstallments'Plan' -> Maybe Int
paymentMethodDetailsCardInstallments'Plan'Count PaymentMethodDetailsCardInstallments'Plan'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"interval" 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
"month" Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"type" 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
"fixed_count" Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PaymentMethodDetailsCardInstallments'Plan' -> Encoding
toEncoding PaymentMethodDetailsCardInstallments'Plan'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"count" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardInstallments'Plan' -> Maybe Int
paymentMethodDetailsCardInstallments'Plan'Count PaymentMethodDetailsCardInstallments'Plan'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"interval" 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
"month") Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"type" 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
"fixed_count")))

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsCardInstallments'Plan' where
  parseJSON :: Value -> Parser PaymentMethodDetailsCardInstallments'Plan'
parseJSON = String
-> (Object -> Parser PaymentMethodDetailsCardInstallments'Plan')
-> Value
-> Parser PaymentMethodDetailsCardInstallments'Plan'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PaymentMethodDetailsCardInstallments'Plan'" (\Object
obj -> (Maybe Int -> PaymentMethodDetailsCardInstallments'Plan')
-> Parser (Maybe Int -> PaymentMethodDetailsCardInstallments'Plan')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Int -> PaymentMethodDetailsCardInstallments'Plan'
PaymentMethodDetailsCardInstallments'Plan' Parser (Maybe Int -> PaymentMethodDetailsCardInstallments'Plan')
-> Parser (Maybe Int)
-> Parser PaymentMethodDetailsCardInstallments'Plan'
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
"count"))

-- | Create a new 'PaymentMethodDetailsCardInstallments'Plan'' with all required fields.
mkPaymentMethodDetailsCardInstallments'Plan' :: PaymentMethodDetailsCardInstallments'Plan'
mkPaymentMethodDetailsCardInstallments'Plan' :: PaymentMethodDetailsCardInstallments'Plan'
mkPaymentMethodDetailsCardInstallments'Plan' = PaymentMethodDetailsCardInstallments'Plan' :: Maybe Int -> PaymentMethodDetailsCardInstallments'Plan'
PaymentMethodDetailsCardInstallments'Plan' {paymentMethodDetailsCardInstallments'Plan'Count :: Maybe Int
paymentMethodDetailsCardInstallments'Plan'Count = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing}

-- | Defines the object schema located at @components.schemas.payment_method_details_card.properties.three_d_secure.anyOf@ in the specification.
--
-- Populated if this transaction used 3D Secure authentication.
data PaymentMethodDetailsCardThreeDSecure' = PaymentMethodDetailsCardThreeDSecure'
  { -- | authentication_flow: For authenticated transactions: how the customer was authenticated by
    -- the issuing bank.
    PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
paymentMethodDetailsCardThreeDSecure'AuthenticationFlow :: (GHC.Maybe.Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'),
    -- | result: Indicates the outcome of 3D Secure authentication.
    PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'Result'
paymentMethodDetailsCardThreeDSecure'Result :: (GHC.Maybe.Maybe PaymentMethodDetailsCardThreeDSecure'Result'),
    -- | result_reason: Additional information about why 3D Secure succeeded or failed based
    -- on the \`result\`.
    PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
paymentMethodDetailsCardThreeDSecure'ResultReason :: (GHC.Maybe.Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'),
    -- | version: The version of 3D Secure that was used.
    PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
paymentMethodDetailsCardThreeDSecure'Version :: (GHC.Maybe.Maybe PaymentMethodDetailsCardThreeDSecure'Version')
  }
  deriving
    ( Int -> PaymentMethodDetailsCardThreeDSecure' -> ShowS
[PaymentMethodDetailsCardThreeDSecure'] -> ShowS
PaymentMethodDetailsCardThreeDSecure' -> String
(Int -> PaymentMethodDetailsCardThreeDSecure' -> ShowS)
-> (PaymentMethodDetailsCardThreeDSecure' -> String)
-> ([PaymentMethodDetailsCardThreeDSecure'] -> ShowS)
-> Show PaymentMethodDetailsCardThreeDSecure'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCardThreeDSecure'] -> ShowS
$cshowList :: [PaymentMethodDetailsCardThreeDSecure'] -> ShowS
show :: PaymentMethodDetailsCardThreeDSecure' -> String
$cshow :: PaymentMethodDetailsCardThreeDSecure' -> String
showsPrec :: Int -> PaymentMethodDetailsCardThreeDSecure' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsCardThreeDSecure' -> ShowS
GHC.Show.Show,
      PaymentMethodDetailsCardThreeDSecure'
-> PaymentMethodDetailsCardThreeDSecure' -> Bool
(PaymentMethodDetailsCardThreeDSecure'
 -> PaymentMethodDetailsCardThreeDSecure' -> Bool)
-> (PaymentMethodDetailsCardThreeDSecure'
    -> PaymentMethodDetailsCardThreeDSecure' -> Bool)
-> Eq PaymentMethodDetailsCardThreeDSecure'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCardThreeDSecure'
-> PaymentMethodDetailsCardThreeDSecure' -> Bool
$c/= :: PaymentMethodDetailsCardThreeDSecure'
-> PaymentMethodDetailsCardThreeDSecure' -> Bool
== :: PaymentMethodDetailsCardThreeDSecure'
-> PaymentMethodDetailsCardThreeDSecure' -> Bool
$c== :: PaymentMethodDetailsCardThreeDSecure'
-> PaymentMethodDetailsCardThreeDSecure' -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsCardThreeDSecure' where
  toJSON :: PaymentMethodDetailsCardThreeDSecure' -> Value
toJSON PaymentMethodDetailsCardThreeDSecure'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"authentication_flow" Text
-> Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
paymentMethodDetailsCardThreeDSecure'AuthenticationFlow PaymentMethodDetailsCardThreeDSecure'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"result" Text -> Maybe PaymentMethodDetailsCardThreeDSecure'Result' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'Result'
paymentMethodDetailsCardThreeDSecure'Result PaymentMethodDetailsCardThreeDSecure'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"result_reason" Text
-> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
paymentMethodDetailsCardThreeDSecure'ResultReason PaymentMethodDetailsCardThreeDSecure'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"version" Text -> Maybe PaymentMethodDetailsCardThreeDSecure'Version' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
paymentMethodDetailsCardThreeDSecure'Version PaymentMethodDetailsCardThreeDSecure'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PaymentMethodDetailsCardThreeDSecure' -> Encoding
toEncoding PaymentMethodDetailsCardThreeDSecure'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"authentication_flow" Text
-> Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
paymentMethodDetailsCardThreeDSecure'AuthenticationFlow PaymentMethodDetailsCardThreeDSecure'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"result" Text
-> Maybe PaymentMethodDetailsCardThreeDSecure'Result' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'Result'
paymentMethodDetailsCardThreeDSecure'Result PaymentMethodDetailsCardThreeDSecure'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"result_reason" Text
-> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
paymentMethodDetailsCardThreeDSecure'ResultReason PaymentMethodDetailsCardThreeDSecure'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"version" Text
-> Maybe PaymentMethodDetailsCardThreeDSecure'Version' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardThreeDSecure'
-> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
paymentMethodDetailsCardThreeDSecure'Version PaymentMethodDetailsCardThreeDSecure'
obj))))

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsCardThreeDSecure' where
  parseJSON :: Value -> Parser PaymentMethodDetailsCardThreeDSecure'
parseJSON = String
-> (Object -> Parser PaymentMethodDetailsCardThreeDSecure')
-> Value
-> Parser PaymentMethodDetailsCardThreeDSecure'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PaymentMethodDetailsCardThreeDSecure'" (\Object
obj -> ((((Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
 -> Maybe PaymentMethodDetailsCardThreeDSecure'Result'
 -> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
 -> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
 -> PaymentMethodDetailsCardThreeDSecure')
-> Parser
     (Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
      -> Maybe PaymentMethodDetailsCardThreeDSecure'Result'
      -> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
      -> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
      -> PaymentMethodDetailsCardThreeDSecure')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> Maybe PaymentMethodDetailsCardThreeDSecure'Result'
-> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
-> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
-> PaymentMethodDetailsCardThreeDSecure'
PaymentMethodDetailsCardThreeDSecure' Parser
  (Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
   -> Maybe PaymentMethodDetailsCardThreeDSecure'Result'
   -> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
   -> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
   -> PaymentMethodDetailsCardThreeDSecure')
-> Parser
     (Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow')
-> Parser
     (Maybe PaymentMethodDetailsCardThreeDSecure'Result'
      -> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
      -> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
      -> PaymentMethodDetailsCardThreeDSecure')
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"authentication_flow")) Parser
  (Maybe PaymentMethodDetailsCardThreeDSecure'Result'
   -> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
   -> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
   -> PaymentMethodDetailsCardThreeDSecure')
-> Parser (Maybe PaymentMethodDetailsCardThreeDSecure'Result')
-> Parser
     (Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
      -> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
      -> PaymentMethodDetailsCardThreeDSecure')
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser (Maybe PaymentMethodDetailsCardThreeDSecure'Result')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"result")) Parser
  (Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
   -> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
   -> PaymentMethodDetailsCardThreeDSecure')
-> Parser
     (Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason')
-> Parser
     (Maybe PaymentMethodDetailsCardThreeDSecure'Version'
      -> PaymentMethodDetailsCardThreeDSecure')
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"result_reason")) Parser
  (Maybe PaymentMethodDetailsCardThreeDSecure'Version'
   -> PaymentMethodDetailsCardThreeDSecure')
-> Parser (Maybe PaymentMethodDetailsCardThreeDSecure'Version')
-> Parser PaymentMethodDetailsCardThreeDSecure'
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser (Maybe PaymentMethodDetailsCardThreeDSecure'Version')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"version"))

-- | Create a new 'PaymentMethodDetailsCardThreeDSecure'' with all required fields.
mkPaymentMethodDetailsCardThreeDSecure' :: PaymentMethodDetailsCardThreeDSecure'
mkPaymentMethodDetailsCardThreeDSecure' :: PaymentMethodDetailsCardThreeDSecure'
mkPaymentMethodDetailsCardThreeDSecure' =
  PaymentMethodDetailsCardThreeDSecure' :: Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> Maybe PaymentMethodDetailsCardThreeDSecure'Result'
-> Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
-> Maybe PaymentMethodDetailsCardThreeDSecure'Version'
-> PaymentMethodDetailsCardThreeDSecure'
PaymentMethodDetailsCardThreeDSecure'
    { paymentMethodDetailsCardThreeDSecure'AuthenticationFlow :: Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
paymentMethodDetailsCardThreeDSecure'AuthenticationFlow = Maybe PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardThreeDSecure'Result :: Maybe PaymentMethodDetailsCardThreeDSecure'Result'
paymentMethodDetailsCardThreeDSecure'Result = Maybe PaymentMethodDetailsCardThreeDSecure'Result'
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardThreeDSecure'ResultReason :: Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
paymentMethodDetailsCardThreeDSecure'ResultReason = Maybe PaymentMethodDetailsCardThreeDSecure'ResultReason'
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardThreeDSecure'Version :: Maybe PaymentMethodDetailsCardThreeDSecure'Version'
paymentMethodDetailsCardThreeDSecure'Version = Maybe PaymentMethodDetailsCardThreeDSecure'Version'
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the enum schema located at @components.schemas.payment_method_details_card.properties.three_d_secure.anyOf.properties.authentication_flow@ in the specification.
--
-- For authenticated transactions: how the customer was authenticated by
-- the issuing bank.
data PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'Other Data.Aeson.Types.Internal.Value
  | -- | This constructor can be used to send values to the server which are not present in the specification yet.
    PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"challenge"@
    PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'EnumChallenge
  | -- | Represents the JSON value @"frictionless"@
    PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'EnumFrictionless
  deriving (Int
-> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> ShowS
[PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'] -> ShowS
PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' -> String
(Int
 -> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
 -> ShowS)
-> (PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
    -> String)
-> ([PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow']
    -> ShowS)
-> Show PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'] -> ShowS
$cshowList :: [PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'] -> ShowS
show :: PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' -> String
$cshow :: PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' -> String
showsPrec :: Int
-> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> ShowS
$cshowsPrec :: Int
-> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> ShowS
GHC.Show.Show, PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' -> Bool
(PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
 -> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
 -> Bool)
-> (PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
    -> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
    -> Bool)
-> Eq PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' -> Bool
$c/= :: PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' -> Bool
== :: PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' -> Bool
$c== :: PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' where
  toJSON :: PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' -> Value
toJSON (PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'Other Value
val) = Value
val
  toJSON (PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'EnumChallenge) = Value
"challenge"
  toJSON (PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'EnumFrictionless) = Value
"frictionless"

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow' where
  parseJSON :: Value
-> Parser PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
parseJSON Value
val =
    PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
-> Parser PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure
      ( if
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"challenge" -> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'EnumChallenge
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"frictionless" -> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'EnumFrictionless
            | Bool
GHC.Base.otherwise -> Value -> PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'
PaymentMethodDetailsCardThreeDSecure'AuthenticationFlow'Other Value
val
      )

-- | Defines the enum schema located at @components.schemas.payment_method_details_card.properties.three_d_secure.anyOf.properties.result@ in the specification.
--
-- Indicates the outcome of 3D Secure authentication.
data PaymentMethodDetailsCardThreeDSecure'Result'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    PaymentMethodDetailsCardThreeDSecure'Result'Other Data.Aeson.Types.Internal.Value
  | -- | This constructor can be used to send values to the server which are not present in the specification yet.
    PaymentMethodDetailsCardThreeDSecure'Result'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"attempt_acknowledged"@
    PaymentMethodDetailsCardThreeDSecure'Result'EnumAttemptAcknowledged
  | -- | Represents the JSON value @"authenticated"@
    PaymentMethodDetailsCardThreeDSecure'Result'EnumAuthenticated
  | -- | Represents the JSON value @"failed"@
    PaymentMethodDetailsCardThreeDSecure'Result'EnumFailed
  | -- | Represents the JSON value @"not_supported"@
    PaymentMethodDetailsCardThreeDSecure'Result'EnumNotSupported
  | -- | Represents the JSON value @"processing_error"@
    PaymentMethodDetailsCardThreeDSecure'Result'EnumProcessingError
  deriving (Int -> PaymentMethodDetailsCardThreeDSecure'Result' -> ShowS
[PaymentMethodDetailsCardThreeDSecure'Result'] -> ShowS
PaymentMethodDetailsCardThreeDSecure'Result' -> String
(Int -> PaymentMethodDetailsCardThreeDSecure'Result' -> ShowS)
-> (PaymentMethodDetailsCardThreeDSecure'Result' -> String)
-> ([PaymentMethodDetailsCardThreeDSecure'Result'] -> ShowS)
-> Show PaymentMethodDetailsCardThreeDSecure'Result'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCardThreeDSecure'Result'] -> ShowS
$cshowList :: [PaymentMethodDetailsCardThreeDSecure'Result'] -> ShowS
show :: PaymentMethodDetailsCardThreeDSecure'Result' -> String
$cshow :: PaymentMethodDetailsCardThreeDSecure'Result' -> String
showsPrec :: Int -> PaymentMethodDetailsCardThreeDSecure'Result' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsCardThreeDSecure'Result' -> ShowS
GHC.Show.Show, PaymentMethodDetailsCardThreeDSecure'Result'
-> PaymentMethodDetailsCardThreeDSecure'Result' -> Bool
(PaymentMethodDetailsCardThreeDSecure'Result'
 -> PaymentMethodDetailsCardThreeDSecure'Result' -> Bool)
-> (PaymentMethodDetailsCardThreeDSecure'Result'
    -> PaymentMethodDetailsCardThreeDSecure'Result' -> Bool)
-> Eq PaymentMethodDetailsCardThreeDSecure'Result'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCardThreeDSecure'Result'
-> PaymentMethodDetailsCardThreeDSecure'Result' -> Bool
$c/= :: PaymentMethodDetailsCardThreeDSecure'Result'
-> PaymentMethodDetailsCardThreeDSecure'Result' -> Bool
== :: PaymentMethodDetailsCardThreeDSecure'Result'
-> PaymentMethodDetailsCardThreeDSecure'Result' -> Bool
$c== :: PaymentMethodDetailsCardThreeDSecure'Result'
-> PaymentMethodDetailsCardThreeDSecure'Result' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsCardThreeDSecure'Result' where
  toJSON :: PaymentMethodDetailsCardThreeDSecure'Result' -> Value
toJSON (PaymentMethodDetailsCardThreeDSecure'Result'Other Value
val) = Value
val
  toJSON (PaymentMethodDetailsCardThreeDSecure'Result'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'EnumAttemptAcknowledged) = Value
"attempt_acknowledged"
  toJSON (PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'EnumAuthenticated) = Value
"authenticated"
  toJSON (PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'EnumFailed) = Value
"failed"
  toJSON (PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'EnumNotSupported) = Value
"not_supported"
  toJSON (PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'EnumProcessingError) = Value
"processing_error"

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsCardThreeDSecure'Result' where
  parseJSON :: Value -> Parser PaymentMethodDetailsCardThreeDSecure'Result'
parseJSON Value
val =
    PaymentMethodDetailsCardThreeDSecure'Result'
-> Parser PaymentMethodDetailsCardThreeDSecure'Result'
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure
      ( if
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"attempt_acknowledged" -> PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'EnumAttemptAcknowledged
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"authenticated" -> PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'EnumAuthenticated
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"failed" -> PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'EnumFailed
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"not_supported" -> PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'EnumNotSupported
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"processing_error" -> PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'EnumProcessingError
            | Bool
GHC.Base.otherwise -> Value -> PaymentMethodDetailsCardThreeDSecure'Result'
PaymentMethodDetailsCardThreeDSecure'Result'Other Value
val
      )

-- | Defines the enum schema located at @components.schemas.payment_method_details_card.properties.three_d_secure.anyOf.properties.result_reason@ in the specification.
--
-- Additional information about why 3D Secure succeeded or failed based
-- on the \`result\`.
data PaymentMethodDetailsCardThreeDSecure'ResultReason'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    PaymentMethodDetailsCardThreeDSecure'ResultReason'Other Data.Aeson.Types.Internal.Value
  | -- | This constructor can be used to send values to the server which are not present in the specification yet.
    PaymentMethodDetailsCardThreeDSecure'ResultReason'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"abandoned"@
    PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumAbandoned
  | -- | Represents the JSON value @"bypassed"@
    PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumBypassed
  | -- | Represents the JSON value @"canceled"@
    PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumCanceled
  | -- | Represents the JSON value @"card_not_enrolled"@
    PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumCardNotEnrolled
  | -- | Represents the JSON value @"network_not_supported"@
    PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumNetworkNotSupported
  | -- | Represents the JSON value @"protocol_error"@
    PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumProtocolError
  | -- | Represents the JSON value @"rejected"@
    PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumRejected
  deriving (Int -> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> ShowS
[PaymentMethodDetailsCardThreeDSecure'ResultReason'] -> ShowS
PaymentMethodDetailsCardThreeDSecure'ResultReason' -> String
(Int
 -> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> ShowS)
-> (PaymentMethodDetailsCardThreeDSecure'ResultReason' -> String)
-> ([PaymentMethodDetailsCardThreeDSecure'ResultReason'] -> ShowS)
-> Show PaymentMethodDetailsCardThreeDSecure'ResultReason'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCardThreeDSecure'ResultReason'] -> ShowS
$cshowList :: [PaymentMethodDetailsCardThreeDSecure'ResultReason'] -> ShowS
show :: PaymentMethodDetailsCardThreeDSecure'ResultReason' -> String
$cshow :: PaymentMethodDetailsCardThreeDSecure'ResultReason' -> String
showsPrec :: Int -> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> ShowS
GHC.Show.Show, PaymentMethodDetailsCardThreeDSecure'ResultReason'
-> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> Bool
(PaymentMethodDetailsCardThreeDSecure'ResultReason'
 -> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> Bool)
-> (PaymentMethodDetailsCardThreeDSecure'ResultReason'
    -> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> Bool)
-> Eq PaymentMethodDetailsCardThreeDSecure'ResultReason'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCardThreeDSecure'ResultReason'
-> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> Bool
$c/= :: PaymentMethodDetailsCardThreeDSecure'ResultReason'
-> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> Bool
== :: PaymentMethodDetailsCardThreeDSecure'ResultReason'
-> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> Bool
$c== :: PaymentMethodDetailsCardThreeDSecure'ResultReason'
-> PaymentMethodDetailsCardThreeDSecure'ResultReason' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsCardThreeDSecure'ResultReason' where
  toJSON :: PaymentMethodDetailsCardThreeDSecure'ResultReason' -> Value
toJSON (PaymentMethodDetailsCardThreeDSecure'ResultReason'Other Value
val) = Value
val
  toJSON (PaymentMethodDetailsCardThreeDSecure'ResultReason'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumAbandoned) = Value
"abandoned"
  toJSON (PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumBypassed) = Value
"bypassed"
  toJSON (PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumCanceled) = Value
"canceled"
  toJSON (PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumCardNotEnrolled) = Value
"card_not_enrolled"
  toJSON (PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumNetworkNotSupported) = Value
"network_not_supported"
  toJSON (PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumProtocolError) = Value
"protocol_error"
  toJSON (PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumRejected) = Value
"rejected"

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsCardThreeDSecure'ResultReason' where
  parseJSON :: Value -> Parser PaymentMethodDetailsCardThreeDSecure'ResultReason'
parseJSON Value
val =
    PaymentMethodDetailsCardThreeDSecure'ResultReason'
-> Parser PaymentMethodDetailsCardThreeDSecure'ResultReason'
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure
      ( if
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"abandoned" -> PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumAbandoned
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"bypassed" -> PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumBypassed
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"canceled" -> PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumCanceled
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"card_not_enrolled" -> PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumCardNotEnrolled
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"network_not_supported" -> PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumNetworkNotSupported
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"protocol_error" -> PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumProtocolError
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"rejected" -> PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'EnumRejected
            | Bool
GHC.Base.otherwise -> Value -> PaymentMethodDetailsCardThreeDSecure'ResultReason'
PaymentMethodDetailsCardThreeDSecure'ResultReason'Other Value
val
      )

-- | Defines the enum schema located at @components.schemas.payment_method_details_card.properties.three_d_secure.anyOf.properties.version@ in the specification.
--
-- The version of 3D Secure that was used.
data PaymentMethodDetailsCardThreeDSecure'Version'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    PaymentMethodDetailsCardThreeDSecure'Version'Other Data.Aeson.Types.Internal.Value
  | -- | This constructor can be used to send values to the server which are not present in the specification yet.
    PaymentMethodDetailsCardThreeDSecure'Version'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"1.0.2"@
    PaymentMethodDetailsCardThreeDSecure'Version'Enum1'0'2
  | -- | Represents the JSON value @"2.1.0"@
    PaymentMethodDetailsCardThreeDSecure'Version'Enum2'1'0
  | -- | Represents the JSON value @"2.2.0"@
    PaymentMethodDetailsCardThreeDSecure'Version'Enum2'2'0
  deriving (Int -> PaymentMethodDetailsCardThreeDSecure'Version' -> ShowS
[PaymentMethodDetailsCardThreeDSecure'Version'] -> ShowS
PaymentMethodDetailsCardThreeDSecure'Version' -> String
(Int -> PaymentMethodDetailsCardThreeDSecure'Version' -> ShowS)
-> (PaymentMethodDetailsCardThreeDSecure'Version' -> String)
-> ([PaymentMethodDetailsCardThreeDSecure'Version'] -> ShowS)
-> Show PaymentMethodDetailsCardThreeDSecure'Version'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCardThreeDSecure'Version'] -> ShowS
$cshowList :: [PaymentMethodDetailsCardThreeDSecure'Version'] -> ShowS
show :: PaymentMethodDetailsCardThreeDSecure'Version' -> String
$cshow :: PaymentMethodDetailsCardThreeDSecure'Version' -> String
showsPrec :: Int -> PaymentMethodDetailsCardThreeDSecure'Version' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsCardThreeDSecure'Version' -> ShowS
GHC.Show.Show, PaymentMethodDetailsCardThreeDSecure'Version'
-> PaymentMethodDetailsCardThreeDSecure'Version' -> Bool
(PaymentMethodDetailsCardThreeDSecure'Version'
 -> PaymentMethodDetailsCardThreeDSecure'Version' -> Bool)
-> (PaymentMethodDetailsCardThreeDSecure'Version'
    -> PaymentMethodDetailsCardThreeDSecure'Version' -> Bool)
-> Eq PaymentMethodDetailsCardThreeDSecure'Version'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCardThreeDSecure'Version'
-> PaymentMethodDetailsCardThreeDSecure'Version' -> Bool
$c/= :: PaymentMethodDetailsCardThreeDSecure'Version'
-> PaymentMethodDetailsCardThreeDSecure'Version' -> Bool
== :: PaymentMethodDetailsCardThreeDSecure'Version'
-> PaymentMethodDetailsCardThreeDSecure'Version' -> Bool
$c== :: PaymentMethodDetailsCardThreeDSecure'Version'
-> PaymentMethodDetailsCardThreeDSecure'Version' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsCardThreeDSecure'Version' where
  toJSON :: PaymentMethodDetailsCardThreeDSecure'Version' -> Value
toJSON (PaymentMethodDetailsCardThreeDSecure'Version'Other Value
val) = Value
val
  toJSON (PaymentMethodDetailsCardThreeDSecure'Version'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (PaymentMethodDetailsCardThreeDSecure'Version'
PaymentMethodDetailsCardThreeDSecure'Version'Enum1'0'2) = Value
"1.0.2"
  toJSON (PaymentMethodDetailsCardThreeDSecure'Version'
PaymentMethodDetailsCardThreeDSecure'Version'Enum2'1'0) = Value
"2.1.0"
  toJSON (PaymentMethodDetailsCardThreeDSecure'Version'
PaymentMethodDetailsCardThreeDSecure'Version'Enum2'2'0) = Value
"2.2.0"

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsCardThreeDSecure'Version' where
  parseJSON :: Value -> Parser PaymentMethodDetailsCardThreeDSecure'Version'
parseJSON Value
val =
    PaymentMethodDetailsCardThreeDSecure'Version'
-> Parser PaymentMethodDetailsCardThreeDSecure'Version'
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure
      ( if
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"1.0.2" -> PaymentMethodDetailsCardThreeDSecure'Version'
PaymentMethodDetailsCardThreeDSecure'Version'Enum1'0'2
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"2.1.0" -> PaymentMethodDetailsCardThreeDSecure'Version'
PaymentMethodDetailsCardThreeDSecure'Version'Enum2'1'0
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"2.2.0" -> PaymentMethodDetailsCardThreeDSecure'Version'
PaymentMethodDetailsCardThreeDSecure'Version'Enum2'2'0
            | Bool
GHC.Base.otherwise -> Value -> PaymentMethodDetailsCardThreeDSecure'Version'
PaymentMethodDetailsCardThreeDSecure'Version'Other Value
val
      )

-- | Defines the object schema located at @components.schemas.payment_method_details_card.properties.wallet.anyOf@ in the specification.
--
-- If this Card is part of a card wallet, this contains the details of the card wallet.
data PaymentMethodDetailsCardWallet' = PaymentMethodDetailsCardWallet'
  { -- | amex_express_checkout:
    PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'AmexExpressCheckout :: (GHC.Maybe.Maybe PaymentMethodDetailsCardWalletAmexExpressCheckout),
    -- | apple_pay:
    PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'ApplePay :: (GHC.Maybe.Maybe PaymentMethodDetailsCardWalletApplePay),
    -- | dynamic_last4: (For tokenized numbers only.) The last four digits of the device account number.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsCardWallet' -> Maybe Text
paymentMethodDetailsCardWallet'DynamicLast4 :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | google_pay:
    PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'GooglePay :: (GHC.Maybe.Maybe PaymentMethodDetailsCardWalletGooglePay),
    -- | masterpass:
    PaymentMethodDetailsCardWallet'
-> Maybe PaymentMethodDetailsCardWalletMasterpass
paymentMethodDetailsCardWallet'Masterpass :: (GHC.Maybe.Maybe PaymentMethodDetailsCardWalletMasterpass),
    -- | samsung_pay:
    PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'SamsungPay :: (GHC.Maybe.Maybe PaymentMethodDetailsCardWalletSamsungPay),
    -- | type: The type of the card wallet, one of \`amex_express_checkout\`, \`apple_pay\`, \`google_pay\`, \`masterpass\`, \`samsung_pay\`, or \`visa_checkout\`. An additional hash is included on the Wallet subhash with a name matching this value. It contains additional information specific to the card wallet type.
    PaymentMethodDetailsCardWallet'
-> Maybe PaymentMethodDetailsCardWallet'Type'
paymentMethodDetailsCardWallet'Type :: (GHC.Maybe.Maybe PaymentMethodDetailsCardWallet'Type'),
    -- | visa_checkout:
    PaymentMethodDetailsCardWallet'
-> Maybe PaymentMethodDetailsCardWalletVisaCheckout
paymentMethodDetailsCardWallet'VisaCheckout :: (GHC.Maybe.Maybe PaymentMethodDetailsCardWalletVisaCheckout)
  }
  deriving
    ( Int -> PaymentMethodDetailsCardWallet' -> ShowS
[PaymentMethodDetailsCardWallet'] -> ShowS
PaymentMethodDetailsCardWallet' -> String
(Int -> PaymentMethodDetailsCardWallet' -> ShowS)
-> (PaymentMethodDetailsCardWallet' -> String)
-> ([PaymentMethodDetailsCardWallet'] -> ShowS)
-> Show PaymentMethodDetailsCardWallet'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCardWallet'] -> ShowS
$cshowList :: [PaymentMethodDetailsCardWallet'] -> ShowS
show :: PaymentMethodDetailsCardWallet' -> String
$cshow :: PaymentMethodDetailsCardWallet' -> String
showsPrec :: Int -> PaymentMethodDetailsCardWallet' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsCardWallet' -> ShowS
GHC.Show.Show,
      PaymentMethodDetailsCardWallet'
-> PaymentMethodDetailsCardWallet' -> Bool
(PaymentMethodDetailsCardWallet'
 -> PaymentMethodDetailsCardWallet' -> Bool)
-> (PaymentMethodDetailsCardWallet'
    -> PaymentMethodDetailsCardWallet' -> Bool)
-> Eq PaymentMethodDetailsCardWallet'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCardWallet'
-> PaymentMethodDetailsCardWallet' -> Bool
$c/= :: PaymentMethodDetailsCardWallet'
-> PaymentMethodDetailsCardWallet' -> Bool
== :: PaymentMethodDetailsCardWallet'
-> PaymentMethodDetailsCardWallet' -> Bool
$c== :: PaymentMethodDetailsCardWallet'
-> PaymentMethodDetailsCardWallet' -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsCardWallet' where
  toJSON :: PaymentMethodDetailsCardWallet' -> Value
toJSON PaymentMethodDetailsCardWallet'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"amex_express_checkout" Text -> Maybe Object -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'AmexExpressCheckout PaymentMethodDetailsCardWallet'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"apple_pay" Text -> Maybe Object -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'ApplePay PaymentMethodDetailsCardWallet'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"dynamic_last4" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet' -> Maybe Text
paymentMethodDetailsCardWallet'DynamicLast4 PaymentMethodDetailsCardWallet'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"google_pay" Text -> Maybe Object -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'GooglePay PaymentMethodDetailsCardWallet'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"masterpass" Text -> Maybe PaymentMethodDetailsCardWalletMasterpass -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet'
-> Maybe PaymentMethodDetailsCardWalletMasterpass
paymentMethodDetailsCardWallet'Masterpass PaymentMethodDetailsCardWallet'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"samsung_pay" Text -> Maybe Object -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'SamsungPay PaymentMethodDetailsCardWallet'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"type" Text -> Maybe PaymentMethodDetailsCardWallet'Type' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet'
-> Maybe PaymentMethodDetailsCardWallet'Type'
paymentMethodDetailsCardWallet'Type PaymentMethodDetailsCardWallet'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"visa_checkout" Text -> Maybe PaymentMethodDetailsCardWalletVisaCheckout -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet'
-> Maybe PaymentMethodDetailsCardWalletVisaCheckout
paymentMethodDetailsCardWallet'VisaCheckout PaymentMethodDetailsCardWallet'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PaymentMethodDetailsCardWallet' -> Encoding
toEncoding PaymentMethodDetailsCardWallet'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"amex_express_checkout" Text -> Maybe Object -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'AmexExpressCheckout PaymentMethodDetailsCardWallet'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"apple_pay" Text -> Maybe Object -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'ApplePay PaymentMethodDetailsCardWallet'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"dynamic_last4" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet' -> Maybe Text
paymentMethodDetailsCardWallet'DynamicLast4 PaymentMethodDetailsCardWallet'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"google_pay" Text -> Maybe Object -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'GooglePay PaymentMethodDetailsCardWallet'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"masterpass" Text -> Maybe PaymentMethodDetailsCardWalletMasterpass -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet'
-> Maybe PaymentMethodDetailsCardWalletMasterpass
paymentMethodDetailsCardWallet'Masterpass PaymentMethodDetailsCardWallet'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"samsung_pay" Text -> Maybe Object -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet' -> Maybe Object
paymentMethodDetailsCardWallet'SamsungPay PaymentMethodDetailsCardWallet'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"type" Text -> Maybe PaymentMethodDetailsCardWallet'Type' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet'
-> Maybe PaymentMethodDetailsCardWallet'Type'
paymentMethodDetailsCardWallet'Type PaymentMethodDetailsCardWallet'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"visa_checkout" Text -> Maybe PaymentMethodDetailsCardWalletVisaCheckout -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsCardWallet'
-> Maybe PaymentMethodDetailsCardWalletVisaCheckout
paymentMethodDetailsCardWallet'VisaCheckout PaymentMethodDetailsCardWallet'
obj))))))))

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsCardWallet' where
  parseJSON :: Value -> Parser PaymentMethodDetailsCardWallet'
parseJSON = String
-> (Object -> Parser PaymentMethodDetailsCardWallet')
-> Value
-> Parser PaymentMethodDetailsCardWallet'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PaymentMethodDetailsCardWallet'" (\Object
obj -> ((((((((Maybe Object
 -> Maybe Object
 -> Maybe Text
 -> Maybe Object
 -> Maybe PaymentMethodDetailsCardWalletMasterpass
 -> Maybe Object
 -> Maybe PaymentMethodDetailsCardWallet'Type'
 -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
 -> PaymentMethodDetailsCardWallet')
-> Parser
     (Maybe Object
      -> Maybe Object
      -> Maybe Text
      -> Maybe Object
      -> Maybe PaymentMethodDetailsCardWalletMasterpass
      -> Maybe Object
      -> Maybe PaymentMethodDetailsCardWallet'Type'
      -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
      -> PaymentMethodDetailsCardWallet')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Object
-> Maybe Object
-> Maybe Text
-> Maybe Object
-> Maybe PaymentMethodDetailsCardWalletMasterpass
-> Maybe Object
-> Maybe PaymentMethodDetailsCardWallet'Type'
-> Maybe PaymentMethodDetailsCardWalletVisaCheckout
-> PaymentMethodDetailsCardWallet'
PaymentMethodDetailsCardWallet' Parser
  (Maybe Object
   -> Maybe Object
   -> Maybe Text
   -> Maybe Object
   -> Maybe PaymentMethodDetailsCardWalletMasterpass
   -> Maybe Object
   -> Maybe PaymentMethodDetailsCardWallet'Type'
   -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
   -> PaymentMethodDetailsCardWallet')
-> Parser (Maybe Object)
-> Parser
     (Maybe Object
      -> Maybe Text
      -> Maybe Object
      -> Maybe PaymentMethodDetailsCardWalletMasterpass
      -> Maybe Object
      -> Maybe PaymentMethodDetailsCardWallet'Type'
      -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
      -> PaymentMethodDetailsCardWallet')
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
"amex_express_checkout")) Parser
  (Maybe Object
   -> Maybe Text
   -> Maybe Object
   -> Maybe PaymentMethodDetailsCardWalletMasterpass
   -> Maybe Object
   -> Maybe PaymentMethodDetailsCardWallet'Type'
   -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
   -> PaymentMethodDetailsCardWallet')
-> Parser (Maybe Object)
-> Parser
     (Maybe Text
      -> Maybe Object
      -> Maybe PaymentMethodDetailsCardWalletMasterpass
      -> Maybe Object
      -> Maybe PaymentMethodDetailsCardWallet'Type'
      -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
      -> PaymentMethodDetailsCardWallet')
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
"apple_pay")) Parser
  (Maybe Text
   -> Maybe Object
   -> Maybe PaymentMethodDetailsCardWalletMasterpass
   -> Maybe Object
   -> Maybe PaymentMethodDetailsCardWallet'Type'
   -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
   -> PaymentMethodDetailsCardWallet')
-> Parser (Maybe Text)
-> Parser
     (Maybe Object
      -> Maybe PaymentMethodDetailsCardWalletMasterpass
      -> Maybe Object
      -> Maybe PaymentMethodDetailsCardWallet'Type'
      -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
      -> PaymentMethodDetailsCardWallet')
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
"dynamic_last4")) Parser
  (Maybe Object
   -> Maybe PaymentMethodDetailsCardWalletMasterpass
   -> Maybe Object
   -> Maybe PaymentMethodDetailsCardWallet'Type'
   -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
   -> PaymentMethodDetailsCardWallet')
-> Parser (Maybe Object)
-> Parser
     (Maybe PaymentMethodDetailsCardWalletMasterpass
      -> Maybe Object
      -> Maybe PaymentMethodDetailsCardWallet'Type'
      -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
      -> PaymentMethodDetailsCardWallet')
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
"google_pay")) Parser
  (Maybe PaymentMethodDetailsCardWalletMasterpass
   -> Maybe Object
   -> Maybe PaymentMethodDetailsCardWallet'Type'
   -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
   -> PaymentMethodDetailsCardWallet')
-> Parser (Maybe PaymentMethodDetailsCardWalletMasterpass)
-> Parser
     (Maybe Object
      -> Maybe PaymentMethodDetailsCardWallet'Type'
      -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
      -> PaymentMethodDetailsCardWallet')
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text -> Parser (Maybe PaymentMethodDetailsCardWalletMasterpass)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"masterpass")) Parser
  (Maybe Object
   -> Maybe PaymentMethodDetailsCardWallet'Type'
   -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
   -> PaymentMethodDetailsCardWallet')
-> Parser (Maybe Object)
-> Parser
     (Maybe PaymentMethodDetailsCardWallet'Type'
      -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
      -> PaymentMethodDetailsCardWallet')
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
"samsung_pay")) Parser
  (Maybe PaymentMethodDetailsCardWallet'Type'
   -> Maybe PaymentMethodDetailsCardWalletVisaCheckout
   -> PaymentMethodDetailsCardWallet')
-> Parser (Maybe PaymentMethodDetailsCardWallet'Type')
-> Parser
     (Maybe PaymentMethodDetailsCardWalletVisaCheckout
      -> PaymentMethodDetailsCardWallet')
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text -> Parser (Maybe PaymentMethodDetailsCardWallet'Type')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"type")) Parser
  (Maybe PaymentMethodDetailsCardWalletVisaCheckout
   -> PaymentMethodDetailsCardWallet')
-> Parser (Maybe PaymentMethodDetailsCardWalletVisaCheckout)
-> Parser PaymentMethodDetailsCardWallet'
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser (Maybe PaymentMethodDetailsCardWalletVisaCheckout)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"visa_checkout"))

-- | Create a new 'PaymentMethodDetailsCardWallet'' with all required fields.
mkPaymentMethodDetailsCardWallet' :: PaymentMethodDetailsCardWallet'
mkPaymentMethodDetailsCardWallet' :: PaymentMethodDetailsCardWallet'
mkPaymentMethodDetailsCardWallet' =
  PaymentMethodDetailsCardWallet' :: Maybe Object
-> Maybe Object
-> Maybe Text
-> Maybe Object
-> Maybe PaymentMethodDetailsCardWalletMasterpass
-> Maybe Object
-> Maybe PaymentMethodDetailsCardWallet'Type'
-> Maybe PaymentMethodDetailsCardWalletVisaCheckout
-> PaymentMethodDetailsCardWallet'
PaymentMethodDetailsCardWallet'
    { paymentMethodDetailsCardWallet'AmexExpressCheckout :: Maybe Object
paymentMethodDetailsCardWallet'AmexExpressCheckout = Maybe Object
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardWallet'ApplePay :: Maybe Object
paymentMethodDetailsCardWallet'ApplePay = Maybe Object
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardWallet'DynamicLast4 :: Maybe Text
paymentMethodDetailsCardWallet'DynamicLast4 = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardWallet'GooglePay :: Maybe Object
paymentMethodDetailsCardWallet'GooglePay = Maybe Object
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardWallet'Masterpass :: Maybe PaymentMethodDetailsCardWalletMasterpass
paymentMethodDetailsCardWallet'Masterpass = Maybe PaymentMethodDetailsCardWalletMasterpass
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardWallet'SamsungPay :: Maybe Object
paymentMethodDetailsCardWallet'SamsungPay = Maybe Object
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardWallet'Type :: Maybe PaymentMethodDetailsCardWallet'Type'
paymentMethodDetailsCardWallet'Type = Maybe PaymentMethodDetailsCardWallet'Type'
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsCardWallet'VisaCheckout :: Maybe PaymentMethodDetailsCardWalletVisaCheckout
paymentMethodDetailsCardWallet'VisaCheckout = Maybe PaymentMethodDetailsCardWalletVisaCheckout
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the enum schema located at @components.schemas.payment_method_details_card.properties.wallet.anyOf.properties.type@ in the specification.
--
-- The type of the card wallet, one of \`amex_express_checkout\`, \`apple_pay\`, \`google_pay\`, \`masterpass\`, \`samsung_pay\`, or \`visa_checkout\`. An additional hash is included on the Wallet subhash with a name matching this value. It contains additional information specific to the card wallet type.
data PaymentMethodDetailsCardWallet'Type'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    PaymentMethodDetailsCardWallet'Type'Other Data.Aeson.Types.Internal.Value
  | -- | This constructor can be used to send values to the server which are not present in the specification yet.
    PaymentMethodDetailsCardWallet'Type'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"amex_express_checkout"@
    PaymentMethodDetailsCardWallet'Type'EnumAmexExpressCheckout
  | -- | Represents the JSON value @"apple_pay"@
    PaymentMethodDetailsCardWallet'Type'EnumApplePay
  | -- | Represents the JSON value @"google_pay"@
    PaymentMethodDetailsCardWallet'Type'EnumGooglePay
  | -- | Represents the JSON value @"masterpass"@
    PaymentMethodDetailsCardWallet'Type'EnumMasterpass
  | -- | Represents the JSON value @"samsung_pay"@
    PaymentMethodDetailsCardWallet'Type'EnumSamsungPay
  | -- | Represents the JSON value @"visa_checkout"@
    PaymentMethodDetailsCardWallet'Type'EnumVisaCheckout
  deriving (Int -> PaymentMethodDetailsCardWallet'Type' -> ShowS
[PaymentMethodDetailsCardWallet'Type'] -> ShowS
PaymentMethodDetailsCardWallet'Type' -> String
(Int -> PaymentMethodDetailsCardWallet'Type' -> ShowS)
-> (PaymentMethodDetailsCardWallet'Type' -> String)
-> ([PaymentMethodDetailsCardWallet'Type'] -> ShowS)
-> Show PaymentMethodDetailsCardWallet'Type'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsCardWallet'Type'] -> ShowS
$cshowList :: [PaymentMethodDetailsCardWallet'Type'] -> ShowS
show :: PaymentMethodDetailsCardWallet'Type' -> String
$cshow :: PaymentMethodDetailsCardWallet'Type' -> String
showsPrec :: Int -> PaymentMethodDetailsCardWallet'Type' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsCardWallet'Type' -> ShowS
GHC.Show.Show, PaymentMethodDetailsCardWallet'Type'
-> PaymentMethodDetailsCardWallet'Type' -> Bool
(PaymentMethodDetailsCardWallet'Type'
 -> PaymentMethodDetailsCardWallet'Type' -> Bool)
-> (PaymentMethodDetailsCardWallet'Type'
    -> PaymentMethodDetailsCardWallet'Type' -> Bool)
-> Eq PaymentMethodDetailsCardWallet'Type'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsCardWallet'Type'
-> PaymentMethodDetailsCardWallet'Type' -> Bool
$c/= :: PaymentMethodDetailsCardWallet'Type'
-> PaymentMethodDetailsCardWallet'Type' -> Bool
== :: PaymentMethodDetailsCardWallet'Type'
-> PaymentMethodDetailsCardWallet'Type' -> Bool
$c== :: PaymentMethodDetailsCardWallet'Type'
-> PaymentMethodDetailsCardWallet'Type' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsCardWallet'Type' where
  toJSON :: PaymentMethodDetailsCardWallet'Type' -> Value
toJSON (PaymentMethodDetailsCardWallet'Type'Other Value
val) = Value
val
  toJSON (PaymentMethodDetailsCardWallet'Type'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumAmexExpressCheckout) = Value
"amex_express_checkout"
  toJSON (PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumApplePay) = Value
"apple_pay"
  toJSON (PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumGooglePay) = Value
"google_pay"
  toJSON (PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumMasterpass) = Value
"masterpass"
  toJSON (PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumSamsungPay) = Value
"samsung_pay"
  toJSON (PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumVisaCheckout) = Value
"visa_checkout"

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsCardWallet'Type' where
  parseJSON :: Value -> Parser PaymentMethodDetailsCardWallet'Type'
parseJSON Value
val =
    PaymentMethodDetailsCardWallet'Type'
-> Parser PaymentMethodDetailsCardWallet'Type'
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure
      ( if
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"amex_express_checkout" -> PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumAmexExpressCheckout
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"apple_pay" -> PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumApplePay
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"google_pay" -> PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumGooglePay
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"masterpass" -> PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumMasterpass
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"samsung_pay" -> PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumSamsungPay
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"visa_checkout" -> PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'EnumVisaCheckout
            | Bool
GHC.Base.otherwise -> Value -> PaymentMethodDetailsCardWallet'Type'
PaymentMethodDetailsCardWallet'Type'Other Value
val
      )